Blame view

artweb/artbox-core/components/AliasCache.php 1.67 KB
326af919   mzavalniuk   add artbox-core t...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  <?php
      
      namespace artbox\core\components;
      
      use artbox\core\models\Alias;
      use artbox\core\models\Language;
      use yii\base\InvalidParamException;
      use yii\base\Object;
      use yii\helpers\Json;
      
      class AliasCache extends Object
      {
          protected $aliases = [];
      
          /**
           * Get cached Alias or execute callback in order to save new Alias to cache
           *
           * @param array                        $params
           * @param \artbox\core\models\Language $language
           * @param callable                     $callback
           *
           * @return \artbox\core\models\Alias|null
           */
          public function getOrSet(array $params, Language $language, callable $callback)
          {
              try {
                  $paramString = Json::encode($params);
                  if (array_key_exists($paramString, $this->aliases) && array_key_exists(
                          $language->id,
                          $this->aliases[ $paramString ]
                      )
                  ) {
                      return $this->aliases[ $paramString ][ $language->id ];
                  } else {
                      /**
                       * @var \artbox\core\models\Alias $result
                       */
                      $result = $callback();
                      $this->aliases[ $paramString ][ $language->id ] = $result;
                      return $result;
                  }
              } catch (InvalidParamException $exception) {
              }
              return null;
          }
          
          public function cache(Alias $alias)
          {
              $this->aliases[ Json::encode($alias->route) ][ $alias->language_id ] = $alias;
          }
      }