Cacher des données avec le service Symfony CacheItemPoolInterface
Publié le 14/02/2023 • Actualisé le 14/02/2023
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