Créer une entité dans Drupal

Drupal 8

Créer une entité dans Drupal

Soumis par Antoine le sam 21/03/2020 - 12:28

Principes

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 :

$storage->create([
  'nom_machine_champs1'=>valeur, 
  'nom_machine_champs2'=>valeur, 
]);

Soit en enchaînant directement la méthode create()

$newobject=\Drupal::entityTypeManager()->getStorage('identifiant d'un type d'entité')->create([
  'nom_machine_champs1'=>valeur, 
  'nom_machine_champs2'=>valeur, 
]);

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()));"

Nous allons maintenant voir quelques exemples de création d'entités

Exemple de création d'un node 

 $node = \Drupal::entityTypeManager()->getStorage('node')->create(
   [
      'type' => 'article', 
      'title' => 'Mon article perso',
      'body'=>'J\'adore écrire des articles'
]);
$node->save();

Avant de sauver le nouvel article avec la méthode save(), il est possible de le modifier comme il est décrit dans l'article modifier et sauver une entité

Par exemple pour promouvoir l'article qui vient d'être créé :

$node->setPromoted(true);
$node->save();

Exemple de création d'un rôle

function tp5_install() {
  $role = \Drupal\user\Entity\Role::create([
    'id' => 'client',
    'label' => 'Mon super client',
    'weight'=>4,
    'is_admin'=>null,
    ]);
  $permissions=[
  'create article content',
  'delete own article content',
  'edit own article content',
  ];

  foreach ($permissions as $permission){
    $role->grantPermission($permission);
  }
  $role->save();

Exemple de création d'une taxonomie puis création de termes pour cette taxonomie

$storage = \Drupal::entityTypeManager()->getStorage('taxonomy_vocabulary');
     $vocabularies=$storage->loadMultiple();
    if (!isset($vocabularies['mataxonomie'])) {
      $vocabulary = $storage->create([
        'vid' => 'mataxonomie',
        'description' => 'Permet de décrire des ...',
        'name' => "Ma super taxonomie",
      ]);
      $vocabulary->save();
    }

    $categories = ['Légume', 'Fruit', 'Animaux', 'Planète']; // List of test terms
       foreach ($categories as $category) {
         $term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->create(array(
          'parent' => array(),
           'name' => $category,
           'vid' => 'mataxonomie',
    ));
    $term->save();
  }

 

Version