<?php
declare(strict_types=1);
/*
* This file is part of the Sonata Project package.
*
* (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Sonata\BlockBundle\Cache;
use Sonata\BlockBundle\Block\BlockContextInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
/**
* @deprecated since sonata-project/block-bundle 4.11 and will be removed in 5.0.
*/
final class HttpCacheHandler implements HttpCacheHandlerInterface
{
private ?int $currentTtl = null;
public function alterResponse(Response $response): void
{
if (!$response->isCacheable()) {
// the controller flags the response as private so we keep it private!
return;
}
// no block has been rendered
if (null === $this->currentTtl) {
return;
}
// a block has a lower ttl that the current response, so we update the ttl to match
// the one provided in the block
if ($this->currentTtl < $response->getTtl()) {
$response->setTtl($this->currentTtl);
}
}
public function updateMetadata(Response $response, ?BlockContextInterface $blockContext = null): void
{
if (null === $this->currentTtl) {
$this->currentTtl = $response->getTtl();
}
if ($response->isCacheable() && $response->getTtl() < $this->currentTtl) {
$this->currentTtl = $response->getTtl();
}
}
public function onKernelResponse(ResponseEvent $event): void
{
$this->alterResponse($event->getResponse());
}
}