vendor/suez/webservice-collection-bundle/src/WebServiceCollectionBundle/Subscriber/CacheSubscriber.php line 87

Open in your IDE?
  1. <?php
  2. namespace WebServiceCollectionBundle\Subscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use WebServiceCollectionBundle\Event\WebserviceRequestEvent;
  5. use WebServiceCollectionBundle\Logger\WebServiceLogger;
  6. use WebServiceCollectionBundle\Manager\CacheManager;
  7. use WebServiceCollectionBundle\Model\ResponseInterface;
  8. use WebServiceCollectionBundle\WebserviceEvents;
  9. /**
  10.  * Class CacheManager.
  11.  *
  12.  * @author Christophe Pyree <chpyr@smile.fr>
  13.  */
  14. class CacheSubscriber implements EventSubscriberInterface
  15. {
  16.     /**
  17.      * @var WebServiceLogger
  18.      */
  19.     private $webServiceLogger;
  20.     /**
  21.      * @var CacheManager
  22.      */
  23.     private $cacheManager;
  24.     /**
  25.      * CacheSubscriber constructor.
  26.      *
  27.      * @param CacheManager     $cacheManager
  28.      * @param WebServiceLogger $webServiceLogger
  29.      */
  30.     public function __construct(CacheManager $cacheManagerWebServiceLogger $webServiceLogger)
  31.     {
  32.         $this->webServiceLogger $webServiceLogger;
  33.         $this->cacheManager $cacheManager;
  34.     }
  35.     /**
  36.      * {@inheritdoc}
  37.      *
  38.      * @return array
  39.      */
  40.     public static function getSubscribedEvents()
  41.     {
  42.         return [
  43.             WebserviceEvents::REQUEST_PRE_SEND => [
  44.                 ['getCacheIfExistOnPreSend'1024],
  45.             ],
  46.             WebserviceEvents::REQUEST_POST_SEND => [
  47.                 ['setCacheOnPostSend', -1024],
  48.             ],
  49.         ];
  50.     }
  51.     /**
  52.      * @param WebserviceRequestEvent $webserviceEvent
  53.      *
  54.      * @throws \Psr\SimpleCache\InvalidArgumentException
  55.      */
  56.     public function getCacheIfExistOnPreSend(WebserviceRequestEvent $webserviceEvent)
  57.     {
  58.         $engine $this->cacheManager->getEngine();
  59.         //Cache is not allowed
  60.         if (!$engine || !$this->cacheManager->isCachable($webserviceEvent->getRequest())) {
  61.             //            $this->webServiceLogger->debug(sprintf('%s can\'t be found in cache because it\'s not allowed by bundle config ', $webserviceEvent->getRequest()->getUrl()), [$webserviceEvent->getRequest()->getRequesterClass()]);
  62.             return;
  63.         }
  64.         $hashKey $webserviceEvent->getRequest()->getHashKey();
  65.         if ($parsedCachedResult $engine->get($hashKey)) {
  66.             $webserviceEvent->setParsedResponse($parsedCachedResult);
  67.             $webserviceEvent->setCachedResponse(true);
  68.             $this->webServiceLogger->info(sprintf('%s response has retrieved from CACHE'$webserviceEvent->getRequest()->getRequesterClass()));
  69.         }
  70.     }
  71.     /**
  72.      * Mise en cache de la rĂ©ponse si la configuration du service l'autorise.
  73.      *
  74.      * @param WebserviceRequestEvent $webserviceEvent
  75.      *
  76.      * @throws \Psr\SimpleCache\InvalidArgumentException
  77.      */
  78.     public function setCacheOnPostSend(WebserviceRequestEvent $webserviceEvent)
  79.     {
  80.         if ($webserviceEvent->isCachedResponse()) {
  81.             return;
  82.         }
  83.         $engine $this->cacheManager->getEngine();
  84.         //Cache is not allowed
  85.         if (!$engine || !$this->cacheManager->isCachable($webserviceEvent->getRequest())) {
  86.             return;
  87.         }
  88.         //Responnse has already cached
  89.         if ($webserviceEvent->isCachedResponse()) {
  90.             return;
  91.         }
  92.         //$this->webServiceLogger->info(sprintf('%s setCacheOnPostSend', $webserviceEvent->getRequest()->getRequesterClass()));
  93.         $parsedResponse $webserviceEvent->getParsedResponse();
  94.         $serviceName $webserviceEvent->getRequest()->getRequesterClass();
  95.         if (!$parsedResponse instanceof ResponseInterface) {
  96.             $this->webServiceLogger->info(sprintf('%s response result not implement ResponseInterface. Cache capibility not allowed'$serviceName), [$parsedResponse]);
  97.             return;
  98.         }
  99.         if ($parsedResponse->hasError() || $parsedResponse->getError()) {
  100.             $this->webServiceLogger->error(sprintf('%s Service has returned with error. We can not cache response.'$serviceName), [$parsedResponse]);
  101.             return;
  102.         }
  103.         $hashKey $webserviceEvent->getRequest()->getHashKey();
  104.         $parsedResponse $webserviceEvent->getParsedResponse();
  105.         $ttl $this->cacheManager->getTTL($webserviceEvent->getRequest());
  106.         $return $engine->set(
  107.             $hashKey,
  108.             $parsedResponse,
  109.             $ttl
  110.         );
  111.         $this->webServiceLogger->info(sprintf('Response  was set in cache for "%s" seconds with key %s'$ttl$hashKey));
  112.     }
  113. }