src/Service/Parametros.php line 9

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Repository\ParametroRepository;
  4. class Parametros
  5. {
  6.     private ParametroRepository $repository;
  7.     private array $cache = [];
  8.     private bool $cacheLoaded false;
  9.     public function __construct(ParametroRepository $parametroRepository)
  10.     {
  11.         $this->repository $parametroRepository;
  12.     }
  13.     /**
  14.      * Verifica se o parâmetro está definido na aplicação
  15.      * @param string $name
  16.      * @return bool
  17.      */
  18.     public function has($name): bool {
  19.         $name strtolower($name);
  20.         if (!array_key_exists($name$this->cache)) {
  21.             $this->load($name);
  22.         }
  23.         return $this->cache[$name]['id'] != 0;
  24.     }
  25.     /**
  26.      * Retorna o valor de um parâmetro definido
  27.      * @param string $name
  28.      * @return mixed
  29.      */
  30.     public function get(string $name) {
  31.         return $this->doGet($name'value'nullfalse);
  32.     }
  33.     /**
  34.      * Retorna o valor de um parâmetro possivelmente não definido
  35.      * @param string $name
  36.      * @param mixed $default
  37.      * @return mixed
  38.      */
  39.     public function getIfDefined(string $name$default=null) {
  40.         return $this->doGet($name'value'$defaulttrue);
  41.     }
  42.     /**
  43.      * Retorna o valor para Humanos de um parâmetro definido
  44.      * @param string $name
  45.      * @return mixed
  46.      */
  47.     public function getHuman(string $name) {
  48.         return $this->doGet($name'human'nullfalse);
  49.     }
  50.     /**
  51.      * Retorna uma informação sobre o parâmetro, ou morre
  52.      * @param string $name
  53.      * @param string $field
  54.      * @param mixed $default
  55.      * @param bool $silent
  56.      * @return mixed
  57.      */
  58.     private function doGet(string $namestring $field$defaultbool $silent) {
  59.         $name strtolower($name);
  60.         if (!array_key_exists($name$this->cache)) {
  61.             $this->load($name);
  62.         }
  63.         if ($this->cache[$name]['id'] != 0) {
  64.             return $this->cache[$name][$field];
  65.         }
  66.         else {
  67.             if ($silent) {
  68.                 return $default;
  69.             }
  70.             throw new \LogicException("Parâmetro não inicializado: '$name' -- Execute a sincronização.");
  71.         }
  72.     }
  73.     /**
  74.      * Carrega o parâmetro do banco de dados para o cache, se existir
  75.      * @param string $name
  76.      */
  77.     private function load(string $name) {
  78.         if (!$this->cacheLoaded) {
  79.             $params $this->repository->findAll();
  80.             $this->cache = [];
  81.             foreach ($params as $param) {
  82.                 $this->cache[$param->getName()] = [
  83.                     'id' => $param->getId(),
  84.                     'value' => $param->getValue(),
  85.                     'datatype' => $param->getDataType(),
  86.                     'human' => $param->getHumanValue(),
  87.                 ];
  88.             }
  89.         }
  90.         if (!array_key_exists($name$this->cache)) {
  91.             $this->cache[$name] = ['id' => 0];
  92.         }
  93.     }
  94. }