Les différentes catégories d'entités dans Drupal
Une entité est un ensemble de données structurées. Il existe deux grandes catégories d’entités : les entités de configuration et les entités de contenu.
Une entité est un ensemble de données structurées. Il existe deux grandes catégories d’entités : les entités de configuration et les entités de contenu.
Pour charger une entité, on utilise une "storage instance" à partir du service entityTypeManager. Pour utiliser ce service, il y a deux méthodes. La simple consiste à l'appeler à l'aide du code :
\Drupal::entityTypeManager()->getStorage('id_type_entité')
Il est donc primordial de connaitre les identifiants des différents types d'entités. Pour cela, il est possible d'utiliser la commande drush suivante :
Dans cet article nous allons voir comment modifier puis sauvegarder une entité. Vous êtes censé savoir avoir lu l'article charger des entités
Dans ce tuto nous allons imaginer que le node 1 a été chargée de la façon suivante :
Pour créer une nouvelle entité, il suffit d'utiliser la méthode create() de l'interface d'une classe de stockage d'entité. Pour obtenir une classe de stockage d'entité on utilise la fonction suivante :
$storage=\Drupal::entityTypeManager()->getStorage("identifiant d'un type d'entité")
Ensuite, on peut utiliser la méthode create() soit sur la variable $storage :
Pour supprimer une entité, il faut commencer par la charger, puis, si le contenu existe, lui appliquer la méthode delete().
Pour rappel, on utilise la méthode getStorage('identifiant_type_entité') pour obtenir une classe de stockage d'entité. Ensuite on utilise une méthode de chargement comme load ou loadmultiple (voir l'article "charger une entité")
Dans l'exemple ci-dessous, on charge le noeud 1 avant de le supprimer :
Avant de lancer des actions sur des entités, il peut être nécessaire de vérifier s'il s'agit d'un bien d'une entité ou son type.
Vérifier qu'une variable contient bien une entité :
if ($entity instanceof \Drupal\Core\Entity\EntityInterface) {
}
Vérifier qu'il s'agit bien d'un noeud
if ($entity instanceof \Drupal\node\NodeInterface) {
}
Vérifier qu'il s'agit bien d'un type de contenu particulier comme un article ou une page
Pour créer un type de contenu à l'aide d'un module, il faut rajoute les fichiers yaml qui décrivent ce type de contenu et tous ses champs dans le répertoire config/install du module.
Créer les fichiers yaml peut être très laborieux. C'est pourquoi il est conseillé de créer le type de contenu avec l'interface graphique puis de les exporter à l'aide de l'outil en ligne de commande drupal console. Pour savoir comment installer cet outil, lisez l'article "installer drupal console"
Pour afficher un noeud, il faut commencer par la charger comme décrit dans l'article "Charger des entités depuis un contrôleur". Ensuite on génère une instance de la classe view builder avec la méthode getViewBuilder() de la classe entityTypeManager puis on utilise la méthode view("entity", "view_mode" et "lang_code").
La classe views permet d'afficher des vues. Il faut donc commencer par la charger
use Drupal\views\Views;
Ensuite on récupère la vue
$view = Views::getView('liste_livre');
Enfin on génère le render array