vendor/sonata-project/block-bundle/src/Cache/HttpCacheHandler.php line 66

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * This file is part of the Sonata Project package.
  5.  *
  6.  * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  7.  *
  8.  * For the full copyright and license information, please view the LICENSE
  9.  * file that was distributed with this source code.
  10.  */
  11. namespace Sonata\BlockBundle\Cache;
  12. use Sonata\BlockBundle\Block\BlockContextInterface;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  15. class HttpCacheHandler implements HttpCacheHandlerInterface
  16. {
  17.     /**
  18.      * @var int|null
  19.      */
  20.     protected $currentTtl null;
  21.     /**
  22.      * {@inheritdoc}
  23.      */
  24.     public function alterResponse(Response $response)
  25.     {
  26.         if (!$response->isCacheable()) {
  27.             // the controller flags the response as private so we keep it private!
  28.             return;
  29.         }
  30.         // no block has been rendered
  31.         if (null === $this->currentTtl) {
  32.             return;
  33.         }
  34.         // a block has a lower ttl that the current response, so we update the ttl to match
  35.         // the one provided in the block
  36.         if ($this->currentTtl $response->getTtl()) {
  37.             $response->setTtl($this->currentTtl);
  38.         }
  39.     }
  40.     /**
  41.      * {@inheritdoc}
  42.      */
  43.     public function updateMetadata(Response $responseBlockContextInterface $blockContext null)
  44.     {
  45.         if (null === $this->currentTtl) {
  46.             $this->currentTtl $response->getTtl();
  47.         }
  48.         if (null !== $response->isCacheable() && $response->getTtl() < $this->currentTtl) {
  49.             $this->currentTtl $response->getTtl();
  50.         }
  51.     }
  52.     /**
  53.      * {@inheritdoc}
  54.      */
  55.     public function onKernelResponse(FilterResponseEvent $event)
  56.     {
  57.         $this->alterResponse($event->getResponse());
  58.     }
  59. }