Salut, existe-t-il un moyen d'effacer TOUTES les données mises en cache du composant de cache symfony?

Ici http://symfony.com/doc/current/components/cache/cache_pools .html en bas est: (j'ai besoin de la commande console)

$cacheIsEmpty = $cache->clear();

Et commande:

bin/console cache:clear

Garde ce cache intact

Je recherche la commande de console que je peux appeler dans le script * .sh à chaque déploiement.

EDIT (exemple):

Options d'entrée par défaut:

 $cache = new FilesystemAdapter();
 $defaultInputOptions = $cache->getItem('mainFilter.defaultInputOptions');

 if (!$defaultInputOptions->isHit()) {
      // collect data, format etc.
      $expiration = new \DateInterval('P1D');
      $defaultInputOptions->expiresAfter($expiration);
      $cache->save($defaultInputOptions);
 } else {
      return $defaultInputOptions->get();
 }

Mais si je change quelque chose dans `` collecter les données, le format, etc. '' sur ma machine et après cela, make deploy (git pull, composer install, bin / console cache: clear ...) puis la nouvelle version sur le serveur a toujours un cache valide (1 jour) et en prend les données ...

2
Lajdák Marek 16 janv. 2017 à 18:54

2 réponses

Meilleure réponse

Vous pouvez faire en sorte que n'importe quel service de votre choix implémente le cache Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface utilisé par le cache natif symfony: effacer

use Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface;
use Symfony\Component\Cache\Adapter\AdapterInterface;

final class SomeCacheClearer implements CacheClearerInterface
{
    private $cache;

    public function __construct(AdapterInterface $filesystemAdapter)
    {
        $this->cache = $filesystemAdapter;
    }

    public function clear($cacheDir)
    {
        $this->cache->clear();
    }
}

La configuration se fait par le tag kernel.cache_clearer

cache_provider.clearer:
    class: AppBundle\Path\SomeCacheClearer
    arguments:
        - 'my_app_cache'
    tags:
        - { name: kernel.cache_clearer }

EDIT: précision sur le cache en tant que service:

Votre service de cache pourrait être défini comme ça

my_app_cache:
    class: Symfony\Component\Cache\Adapter\FilesystemAdapter

Ou si vous souhaitez spécifier un espace de noms et ttl

my_app_cache:
    class: Symfony\Component\Cache\Adapter\FilesystemAdapter
    arguments:
        - 'my_cache_namespace'
        - 30 #cache ttl  (in seconds)

Vous ne devez donc pas utiliser

$cache = new FilesystemAdapter();

Mais avec l'injection de services

$cache = $this->get('my_app_cache');
2
goto 19 janv. 2017 à 10:44

À la fin - il suffit de modifier uniquement services.yml et d'ajouter:

appbundle.cachecomponent.clearall:
    class: Symfony\Component\Cache\Adapter\FilesystemAdapter
    tags:
        - { name: kernel.cache_clearer }

Je suis nouveau dans symfony donc j'espère que c'est la bonne solution.

1
Lajdák Marek 19 janv. 2017 à 10:55