Cacher des données avec le service Symfony CacheItemPoolInterface

Publié le 14/02/2023 • Actualisé le 14/02/2023


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Dans ce bout de code, nous voyons comment cacher des données avec le service Symfony CacheItemPoolInterface. Dans un snippet précédent, nous avons vu comment cacher des données grâce au service implémentant CacheInterface. Ça fonctionne bien, mais ça nous donne peu de contrôle sur la mise en cache. Pour des cas plus avancé, on peut utiliser le service CacheItemPoolInterface, par exemple, si nous voulons faire certaines actions spécifiques, si un cache est trouvé ou pas pour une clé de cache donnée.


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

use Psr\Cache\CacheItemPoolInterface;

/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 *
 * @property CacheItemPoolInterface $cacheItemPool
 */
trait Snippet243Trait
{
    public function snippet243(): void
    {
        $cacheItem = $this->cacheItemPool
            ->getItem('my_cache_key')
            ->expiresAfter(\DateInterval::createFromDateString('10 seconds'))
        ;

        if ($cacheItem->isHit()) {
            echo 'There was a hit for the cache key: '.$cacheItem->get();
        } else {
            echo 'No cache hit. Saving cache item.';
            $cacheItem->set('cache_value');
            $this->cacheItemPool->save($cacheItem);
        }

        // That's it! 😁
    }
}

 Exécuter le snippet  Plus sur Stackoverflow   Lire la doc  Snippet aléatoire

  Travaillez avec moi !