Probably the best way to do this would be to use Service decoration, but i prefered the dirty way for now.
In my case i just needed the shared cached headers for a specific controller.
Workaroung for Symfony 3.4.*:
Create a listener with lower priority than Symfony\Component\HttpKernel\EventListener\SessionListener
in services.yml
(don't know if this is recommended):
AppBundle\Listener\ResponseListener:
tags:
- { name: kernel.event_listener, event: kernel.response, priority: -1001 }
Then in AppBundle\Listener\ResponseListener
:
<?php
namespace AppBundle\Listener;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
class ResponseListener
{
public function onKernelResponse(FilterResponseEvent $event)
{
$response = $event->getResponse();
$controller = $event->getRequest()->attributes->get('_controller');
$requiredAssetAction = "AppBundle\Controller\Website\AssetsController::assetAction";
if ($controller == $requiredAssetAction) {
$response->headers->addCacheControlDirective('max-age', 900);
$response->headers->addCacheControlDirective('s-maxage', 900);
$response->headers->addCacheControlDirective('must-revalidate', true);
$response->headers->addCacheControlDirective('public', true);
$response->headers->removeCacheControlDirective('private');
}
$event->setResponse($response);
}
}