app/Customize/Entity/CacheTrait.php line 52

Open in your IDE?
  1. <?php
  2. namespace Customize\Entity;
  3. use Eccube\Common\Constant;
  4. use Symfony\Component\Cache\Adapter\AbstractAdapter;
  5. use Symfony\Component\Cache\CacheItem;
  6. use Symfony\Contracts\Cache\ItemInterface;
  7. use Symfony\Component\Cache\Adapter\MemcachedAdapter;
  8. trait CacheTrait
  9. {
  10.     /**
  11.      * @var bool
  12.      */
  13.     protected $cacheEnabled true;
  14.     /**
  15.      * @return MemcachedAdapter
  16.      * @throws \ErrorException
  17.      */
  18.     private function getConfigCache()
  19.     {
  20.         $host env('CACHE_HOST''127.0.0.1');
  21.         $port env('CACHE_PORT''11211');
  22.         $cacheConnection 'memcached://' $host ':' $port;
  23.         $client MemcachedAdapter::createConnection($cacheConnection);
  24.         if ($adapter = new MemcachedAdapter($client$namespace ''$defaultLifetime Constant::ONE_HOUR)) {
  25.             // backofficeのキャッシュクリア/生成管理の仕様と合わせる
  26.             $adapter->enableVersioning(false);
  27.         }
  28.         return $adapter;
  29.     }
  30.     /***
  31.      * @param string $cacheKey
  32.      * @param callable $callback
  33.      * @param int $ttl
  34.      * @return mixed|null
  35.      * @throws \Psr\Cache\InvalidArgumentException
  36.      */
  37.     public function getCacheByKey(string $cacheKey, callable $callbackint $ttl Constant::ONE_HOUR)
  38.     {
  39.         if (!$this->isCacheEnabled()) {
  40.             //
  41.             return $callback();
  42.         }
  43.         if (empty($cacheKey) || empty($callback)) return null;
  44.         $cache self::getConfigCache();
  45.         return $cache->get($cacheKey, function (ItemInterface $item) use ($callback$ttl) {
  46.             $data call_user_func($callback);
  47.             $item->expiresAfter($ttl);
  48.             return $data;
  49.         });
  50.     }
  51.     /**
  52.      * @return bool
  53.      */
  54.     protected function isCacheEnabled()
  55.     {
  56.         return $this->cacheEnabled;
  57.     }
  58.     protected function enableCache()
  59.     {
  60.         $this->cacheEnabled true;
  61.     }
  62.     protected function disableCache()
  63.     {
  64.         $this->cacheEnabled false;
  65.     }
  66.     /**
  67.      * @param callable|string $masterCacheKey
  68.      * @param string $device
  69.      * @param string[] $cacheKeys
  70.      * @return AbstractAdapter
  71.      * @throws \ErrorException
  72.      * @throws \Psr\Cache\InvalidArgumentException
  73.      */
  74.     protected function handleMasterCache($masterCacheKey$device$cacheKeys)
  75.     {
  76.         //
  77.         $masterCache $this->getConfigCache();
  78.         //
  79.         if (is_callable($masterCacheKey)) {
  80.             //
  81.             $masterCacheKey $masterCacheKey();
  82.         }
  83.         /**
  84.          * @var CacheItem $masterCacheItem
  85.          */
  86.         if ($masterCacheItem $masterCache->getItem($masterCacheKey)) {
  87.             //
  88.             $masterCacheData unserialize(base64_decode($masterCacheItem->get()));
  89.         } else {
  90.             //
  91.             $masterCacheData = [];
  92.         }
  93.         //
  94.         if (!isset($masterCacheData[$device])) {
  95.             //
  96.             $masterCacheData[$device] = [];
  97.         }
  98.         //
  99.         foreach ($cacheKeys as $cacheKey) {
  100.             //
  101.             if (!in_array($cacheKey$masterCacheData[$device])) {
  102.                 //
  103.                 $masterCacheData[$device][] = $cacheKey;
  104.             }
  105.         }
  106.         //
  107.         $masterCache->save($masterCacheItem->set(base64_encode(serialize($masterCacheData))));
  108.         //
  109.         return $masterCache;
  110.     }
  111. }