Configuration API vs State API

Le besoin de partager des configurations entre les environnements dans un projet Drupal est un besoin récurrent, en effet le module Features permettait aux développeurs de partager les différentes configurations (appelées features) entre les environnements de développement et production ou autres, ce dernier était parmi les modules très utilisés et indispensables sur Drupal 7 vu sa flexibilité et son efficacité, chose qui a poussée la communauté à introduire une API de configuration et synchronisation dans le core de Drupal 8.

Voici un simple scénario d'utilisation de l'API Configuration :

  • Création d'un nouveau type de contenu et des champs nécessaires dans le cadre du développement d'une nouvelle fonctionnalité.
  • Une fois que la fonctionnalité est implémentée dans l'environnement du développement, les configurations peuvent être exportées de la bases de donnée via la commande drush config-export sous format des fichiers .yml qui vont être versionnés en utilisant git afin d'être importés par la suite sur un autre environnement via la commande drush config-import.

    Utiliser Configuration Management API.

  • Récupérer une valeur depuis la configuration :

    $slogan = \Drupal::config('system.site')->get('slogan');
  • Sauvegarder une valeur dans la configuration :

    $slogan = \Drupal::config('system.site')->set('slogan','value');

    State API

L'API State permet de stocker des informations concernant l'environnement, l'autrement l'objectif est de garder quelques informations qui sont propre à chaque environnement, l'exemple le plus simple ici c'est l'enregistrement de la dernière fois où le Cron avait tourné, cette information dépend de chaque environnement donc il faut la stocker dans le State. Le principe du State API existe sur la majorité des frameworks sous autres noms, ("envs-variables", "sys-vars" ...) mais l'idée est la même.

Interagir avec State API

  • Récupérer une valeur :

    $value = \Drupal::state()->get('key');
  • Récupérer plusieurs valeurs clés/valeurs :

    $values = \Drupal::state()->getMultiple($keys);
  • Sauvegarder une valeur :

    \Drupal::state()->set('key','value');
  • Sauvegarder plusieurs valeurs :

    \Drupal::state()->setMultiple($keyvalues);
  • Supprimer une valeur :

    \Drupal::state()->delete('key');
  • Supprimer plusieurs valeurs :

    \Drupal::state()->deleteMultiple($keys);

Conclusion :

Pour conclure, les deux APIs donnent la possibilité de stocker des informations, le tableau ci-dessous schématise les points de divergence entre les deux.

Configuration API State API
Les informations peuvent être partagées entre les environnements
Les informations peuveut être modifiées par des utilisateurs
l'API permet de stocker des informations du système