Vue d'ensemble de la configuration (comparée à d'autres types d'informations)
Drupal 8 distingue plusieurs types d’informations :
- Contenu
Informations destinées à être affichées sur votre site et modifiables par les utilisateurs : articles, pages de base, images, fichiers, etc.
- Session
Informations sur les interactions d’un utilisateur individuel avec le site, par exemple leur sélection actuelle de filtre dans une vue. C’est éphémère et personnalisé pour chaque utilisateur.
Informations susceptibles de changer fréquemment et/ou sans intervention de l’utilisateur. Par exemple : la dernière exécution du cron, la nécessité de reconstruire les permissions des nœuds, etc.
Informations sur votre site qui ne sont pas du contenu et changent peu souvent, telles que le nom de votre site, les types de contenu et vues définis, etc.
Informations sur votre site stockées ailleurs. Le cache sert uniquement à accélérer la récupération des données. Il ne contient jamais de données canoniques.
Informations en lecture seule pour votre site, codées en dur dans le fichier settings.php.
Comment classer vos informations
Il n’est pas toujours évident de savoir si une donnée gérée par votre module doit être considérée comme contenu, état ou configuration. Voici quelques conseils :
- Configuration vs état : si votre information doit être déployée de votre serveur de développement vers votre serveur de production, c’est probablement de la configuration, pas de l’état.
- Configuration vs contenu : pensez aux rôles « constructeur de site » ou « éditeur de site ». Si un éditeur souhaite modifier l’information sur le site, c’est probablement du contenu. Si seule la personne construisant le site doit pouvoir modifier, c’est plutôt de la configuration. Ce n’est pas une règle absolue.
- Configuration vs contenu : pensez en termes de volume. Si vous avez beaucoup d’éléments, c’est sûrement du contenu. S’il y en a peu, c’est probablement de la configuration.
- Configuration vs contenu : la configuration définit souvent les « types de choses », comme les types de contenu, les vocabulaires de taxonomie, etc. Chaque « chose » de ce type est du contenu : nœuds, termes de taxonomie, etc.
Configuration simple vs objets de configuration
Une des premières décisions lors de l’utilisation du système de gestion de configuration est de choisir quel type de configuration vous allez stocker.
La configuration simple est plus facile à implémenter et idéale pour des réglages de base stockant des valeurs booléennes, entières ou des chaînes simples. Par exemple, activer ou désactiver une fonctionnalité dans votre module, ou le nom du site défini par le module système. La configuration simple inclut aussi tous les paramètres nécessaires au bon fonctionnement de votre module. Par exemple, l’agrégation des JavaScript est activée ou non. Si elle n’existe pas, le module système ne pourra pas fonctionner correctement. La configuration simple ne dépend que du module qui la fournit. Par exemple, system.site dépend uniquement du module système.
Les objets de configuration contiennent des listes d’éléments que les utilisateurs peuvent créer ou supprimer ; votre code fonctionnera que la liste contienne 0 ou 100+ éléments. Exemple : styles d’images, vues, etc. Les objets de configuration fournissent un ensemble complet de hooks CRUD (création, lecture, mise à jour, suppression), déclenchés comme pour n’importe quel autre objet Drupal, ce qui en fait un candidat idéal pour de la configuration pouvant être étendue ou observée par d’autres modules. Par exemple, Views utilise des objets de configuration pour permettre la définition dynamique de vues par d’autres modules au moment de l’exécution. Les objets de configuration peuvent avoir des dépendances dynamiques. Comme la configuration simple, ils dépendent du module qui les fournit. Par exemple, views.view.frontpage dépend du module Views, mais comme il liste des nœuds, il dépend aussi du module Node. Si la vue est modifiée pour afficher uniquement des articles, elle aura aussi une dépendance à l’objet de configuration de type article (node.type.article
), etc.