Cacher des données avec Symfony
Publié le 13/03/2022 • Actualisé le 13/03/2022
Dans ce bout de code, nous voyons comment cacher simplement des données avec Symfony. Celui-ci est pour moi, car j'oublie toujours comment faire. On doit injecter l'interface CacheInterface
puis utiliser la fonction get()
avec une fonction anonyme. C'est le moyen le plus direct. Dans cet exemple, le contenu caché dépend de la langue utilisée. Patientez cinq secondes et rafraichissez la page pour avoir une nouvelle valeur. Rafraichissez la page avant pour vérifier que le contenu caché est bien retourné. Utiliser un objet DateInterval
est une bonne pratique et plus explicit que de passer un entier représentant un nombre de secondes. On peut fait aussi tout faire en une ligne comme montré dans le return
commenté.
<?php
declare(strict_types=1);
namespace App\Controller\Snippet;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Contracts\Cache\CacheInterface;
use Symfony\Contracts\Cache\ItemInterface;
/**
* 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 CacheInterface $cache
*/
trait Snippet192Trait
{
public function snippet192(Request $request): void
{
$locale = $request->getLocale();
$cached = $this->cache->get('random_cached_'.$locale, function (ItemInterface $item) use ($locale) {
$item->expiresAfter(\DateInterval::createFromDateString('5 seconds'));
echo "Generating new cache for '$locale'...".PHP_EOL;
return $locale.'/'.random_int(0, 100000).'/Strangebuzz.com';
// you can also use a one liner
// return $item->expiresAfter(\DateInterval::createFromDateString('5 seconds'))->set($locale.'/'.random_int(0, 100000).'/Strangebuzz.com')->get();
});
echo 'cache value: '.$cached;
// That's it! 😁
}
}
Exécuter le snippet Plus sur Stackoverflow Lire la doc Plus sur le web Snippet aléatoire