Skip to content

Instantly share code, notes, and snippets.

@ahmed-bhs
Last active November 30, 2018 03:16
Show Gist options
  • Save ahmed-bhs/12d92a21e88045d1abcb3b251ee66fb9 to your computer and use it in GitHub Desktop.
Save ahmed-bhs/12d92a21e88045d1abcb3b251ee66fb9 to your computer and use it in GitHub Desktop.

Pour faire cela sous Symfony, il est possible d'utiliser le système d'event listeners.

1. Créer un listener CacheControlListener comme suit:
<?php

namespace App\EventListener;

use Symfony\Component\HttpKernel\Event\FilterResponseEvent;

class CacheControlListener
{
    private const ROUTES_NOT_TO_CACHE = ['dashboard'];

    public function onKernelResponse(FilterResponseEvent $event)
    {
        if(in_array($event->getRequest()->attributes->get('_route'), self::ROUTES_NOT_TO_CACHE)) {
            $headers = $event->getResponse()->headers;

            $headers->set(
                'Cache-Control',
                'no-cache, no-store, max-age=0, must-revalidate'
            );
        }
    }
}
2. L'enregistrer comme un service dans le fichier config/services.yaml:
App\EventListener\CacheControlListener:
        tags:
            - { name: kernel.event_listener, event: kernel.response }
3. Rajouter toutes les routes qu'on ne souhaite pas mettre en cache au niveau du array ROUTES_NOT_TO_CACHE présent au niveau de la classe CacheControlListener.

J'espère que ça aide :) !

Plus d'infos:
https://symfony.com/doc/current/event_dispatcher.html https://symfony.com/doc/current/event_dispatcher/before_after_filters.html

@Jonathanlight
Copy link

Je trouve que sa aide beaucoup, vives les eventListener 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment