{"componentChunkName":"component---src-templates-post-jsx","path":"/fr/config-api-vs-state-api","result":{"data":{"markdownRemark":{"html":"<p>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.</p>\n<p>Voici un simple scénario d'utilisation de l'API Configuration :</p>\n<ul>\n<li>Création d'un nouveau type de contenu et des champs nécessaires dans le cadre du développement d'une nouvelle fonctionnalité.</li>\n<li>\n<p>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 <code class=\"language-text\">drush config-export</code> 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 <code class=\"language-text\">drush config-import</code>.</p>\n<h3>Utiliser Configuration Management API.</h3>\n</li>\n<li>\n<p>Récupérer une valeur depuis la configuration :</p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\"><span class=\"token variable\">$slogan</span> <span class=\"token operator\">=</span> \\<span class=\"token package\">Drupal</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">config</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'system.site'</span><span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'slogan'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n</li>\n<li>\n<p>Sauvegarder une valeur dans la configuration : </p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\"><span class=\"token variable\">$slogan</span> <span class=\"token operator\">=</span> \\<span class=\"token package\">Drupal</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">config</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'system.site'</span><span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">set</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'slogan'</span><span class=\"token punctuation\">,</span><span class=\"token single-quoted-string string\">'value'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2>State API</h2>\n</li>\n</ul>\n<p>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.\nLe 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.</p>\n<h3>Interagir avec State API</h3>\n<ul>\n<li>\n<p>Récupérer une valeur :  </p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\"><span class=\"token variable\">$value</span> <span class=\"token operator\">=</span> \\<span class=\"token package\">Drupal</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">state</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'key'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n</li>\n<li>\n<p>Récupérer plusieurs valeurs clés/valeurs :  </p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\"><span class=\"token variable\">$values</span> <span class=\"token operator\">=</span> \\<span class=\"token package\">Drupal</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">state</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">getMultiple</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$keys</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n</li>\n<li>\n<p>Sauvegarder une valeur :  </p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\">\\<span class=\"token package\">Drupal</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">state</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">set</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'key'</span><span class=\"token punctuation\">,</span><span class=\"token single-quoted-string string\">'value'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n</li>\n<li>\n<p>Sauvegarder plusieurs valeurs :  </p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\">\\<span class=\"token package\">Drupal</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">state</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">setMultiple</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$keyvalues</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n</li>\n<li>\n<p>Supprimer une valeur :  </p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\">\\<span class=\"token package\">Drupal</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">state</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">delete</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'key'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n</li>\n<li>\n<p>Supprimer plusieurs valeurs :  </p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\">\\<span class=\"token package\">Drupal</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">state</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">deleteMultiple</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$keys</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n</li>\n</ul>\n<h2>Conclusion :</h2>\n<p>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.</p>\n<table>\n<thead>\n<tr>\n<th></th>\n<th align=\"center\">Configuration API</th>\n<th align=\"center\">State API</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Les informations peuvent être partagées entre les environnements</td>\n<td align=\"center\">✅</td>\n<td align=\"center\">❌</td>\n</tr>\n<tr>\n<td>Les informations peuveut être modifiées par des utilisateurs</td>\n<td align=\"center\">✅</td>\n<td align=\"center\">❌</td>\n</tr>\n<tr>\n<td>l'API permet de stocker des informations du système</td>\n<td align=\"center\">❌</td>\n<td align=\"center\">✅</td>\n</tr>\n</tbody>\n</table>","excerpt":"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…","frontmatter":{"date":"2020-06-06","metaDate":"2020-06-06","title":"Configuration API vs State API","tags":["Drupal 8","Drupal 9","Backend","Configuration","State"],"path":"/config-api-vs-state-api","cover":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAMBAgT/xAAXAQADAQAAAAAAAAAAAAAAAAAAAgME/9oADAMBAAIQAxAAAAFyLI1TgzDH/8QAGRAAAwEBAQAAAAAAAAAAAAAAAAECIQMi/9oACAEBAAEFAjq/MVjZewf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAYEAADAQEAAAAAAAAAAAAAAAAAARAhEf/aAAgBAQAGPwIx8Ncc/8QAGBABAQEBAQAAAAAAAAAAAAAAAQARUWH/2gAIAQEAAT8hki9PMay1cYv/2gAMAwEAAgADAAAAEAwf/8QAFhEBAQEAAAAAAAAAAAAAAAAAARBB/9oACAEDAQE/EA2f/8QAFhEBAQEAAAAAAAAAAAAAAAAAABFB/9oACAECAQE/ENR//8QAHBAAAwEAAgMAAAAAAAAAAAAAAREhADFBUWHR/9oACAEBAAE/EOvGGAOOrv1kQ1HZuIEClpCAgD7im//Z","aspectRatio":1.5,"src":"/static/bbd8e98ea8d7290a5fb8c31bbabfbd67/88110/explaining.jpg","srcSet":"/static/bbd8e98ea8d7290a5fb8c31bbabfbd67/0b320/explaining.jpg 480w,\n/static/bbd8e98ea8d7290a5fb8c31bbabfbd67/60b32/explaining.jpg 960w,\n/static/bbd8e98ea8d7290a5fb8c31bbabfbd67/88110/explaining.jpg 1920w,\n/static/bbd8e98ea8d7290a5fb8c31bbabfbd67/40175/explaining.jpg 2880w,\n/static/bbd8e98ea8d7290a5fb8c31bbabfbd67/75970/explaining.jpg 3000w","srcWebp":"/static/bbd8e98ea8d7290a5fb8c31bbabfbd67/d1a9d/explaining.webp","srcSetWebp":"/static/bbd8e98ea8d7290a5fb8c31bbabfbd67/bc3bf/explaining.webp 480w,\n/static/bbd8e98ea8d7290a5fb8c31bbabfbd67/39337/explaining.webp 960w,\n/static/bbd8e98ea8d7290a5fb8c31bbabfbd67/d1a9d/explaining.webp 1920w,\n/static/bbd8e98ea8d7290a5fb8c31bbabfbd67/fcbe1/explaining.webp 2880w,\n/static/bbd8e98ea8d7290a5fb8c31bbabfbd67/d4a49/explaining.webp 3000w","sizes":"(max-width: 1920px) 100vw, 1920px"},"resize":{"src":"/static/bbd8e98ea8d7290a5fb8c31bbabfbd67/c4f3a/explaining.jpg"}}}}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"pathSlug":"/config-api-vs-state-api","locale":"fr","prev":{"fields":{"locale":"fr"},"frontmatter":{"path":"/getting-ready-for-drupal9","title":"Se préparer à Drupal 9","tags":["Drupal 8","Drupal 9","Performance","Update"]}},"next":{"fields":{"locale":"fr"},"frontmatter":{"path":"/middleware-api","title":"Middleware API","tags":["Drupal 9","Core feature","Performance","Module development"]}}}}}