Drupal 8 - Exemple d'utilisation simple du cache

Posté le Mercredi 15 mai 2019 - 12:18

Drupal 8 propose un système de cache très puissant et à plusieurs niveaux.

Ici nous allons voir comment stocker simplement le résultat d'une requête en cache afin de ne pas avoir à la lancer la requête SQL à chaque appel.

Commençons par définir notre « conteneur » de cache dans le fichier mon_module.services.yml :

  1. cache.mon_module:
  2.   class: Drupal\Core\Cache\CacheBackendInterface
  3.   tags:
  4.   - { name: cache.bin }
  5.   factory: cache_factory:get
  6.   arguments: [mon_module]

mon_module sera le nom de notre conteneur de cache.

Cela permettra de distinguer les données que nous mettrons dedans et de ne pas écraser d'autres caches d'autres modules. Si vous utilisez le cache en base de données (par défaut) vous verrez qu'une nouvelle table cache_mon_module a été créée.

Ensuite voici un exemple de lecture du cache, et d'écriture si la donnée n'est pas présente :

  1. public function getVersion() {
  2. // On teste si la clé « database.version » est présente dans le conteneur de cache « mon_module »
  3. if ($results = \Drupal::cache('mon_module')->get('database.version')) {
  4. // Si c'est le cas, les données stockées sont dans l'attribut « data »
  5. return $results->data;
  6. }
  7. // Sinon on effectue la requête désirée
  8. $version = $this->connection->select('version', 'v')->fields('v', ['version'])->execute()->fetch();
  9. // Et on met la valeur en cache
  10. \Drupal::cache('mon_module')->set('database.version', $version->version);
  11.  
  12. return $version->version;
  13. }

Il est possible aussi de donner date d'expiration afin que cette clé de cache ne soit plus valable une fois cette date passée :

  1. // cache valable 1 h (3600 secondes)
  2. \Drupal::cache('mon_module')->set('database.version', $version->version, date('U') + 3600);

 

 

Ajouter un commentaire

Ne sera pas publié

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...