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 :
drush eval "print_r(array_keys(\Drupal::entityTypeManager()->getDefinitions()));"
L'autre solution, plus complexe, consiste à faire une injection de dépendance. Pour simplifier les exemples, nous allons utiliser la première méthode.
Pour charger des entités les méthodes les plus utiles sont :
Load()
Cette méthode permet de charger une entité à partir de son identifiant
// Using the storage controller (recommended).
$entity_type='node';
$entity = \Drupal::entityTypeManager()->getStorage($entity_type)->load(1);
return [
'#theme' => 'nom_defini_dans_nommodule.module',
'#livres' => $entity,
];
loadMultiple(array)
Cette méthode permet de récupérer un tableau d'entité à partir d'un tableau d'identifiant
// Load multiple entities, also exists as entity_load_multiple().
$entity_type='node';
$entities = \Drupal::entityTypeManager()->getStorage($entity_type)->loadMultiple([1, 2, 3]);
return [
'#theme' => 'nom_defini_dans_nommodule.module',
'#livres' => $entities,
];
loadByProperties(['propriété 1'=>'valeur 1', 'propriété 2'=>'valeur 2'])
Cette méthode permet de récupérer un tableau d’entités à partir d’un tableau de couple propriété/valeur. L'exemple suivant permet de charger les noeuds qui sont activés, qui sont du type livre et dont l'auteur est le numéro 3
// Load entities by their property values.
$entities = \Drupal::entityTypeManager()
->getStorage('node')
->loadByProperties([
'status' => '1',
'type' => 'livre',
'field_ecrivain' => 3,
]);
return [
'#theme' => 'nom_defini_dans_nommodule.module',
'#livres' => $entities,
];
Si vous souhaitez faire une recherche sur un champ, vous devez utiliser son nom machine (exemple field_ecrivain)