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

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. /**
  16.  * @final since sonata-project/block-bundle 3.0
  17.  */
  18. class HttpCacheHandler implements HttpCacheHandlerInterface
  19. {
  20.     /**
  21.      * @var int|null
  22.      */
  23.     protected $currentTtl null;
  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.     public function updateMetadata(Response $responseBlockContextInterface $blockContext null)
  41.     {
  42.         if (null === $this->currentTtl) {
  43.             $this->currentTtl $response->getTtl();
  44.         }
  45.         if (null !== $response->isCacheable() && $response->getTtl() < $this->currentTtl) {
  46.             $this->currentTtl $response->getTtl();
  47.         }
  48.     }
  49.     public function onKernelResponse(FilterResponseEvent $event)
  50.     {
  51.         $this->alterResponse($event->getResponse());
  52.     }
  53. }