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 :
$entity_type='node';
$entity = \Drupal::entityTypeManager()->getStorage($entity_type)->load(1);
Une fois l'entité chargée, il est possible de modifier la valeurs des attributs de l'entité ainsi que la valeur des champs.
Modifier les attributs de l'entité
En déroulant la view source de la documentation de l'API drupal pour la classe node on peut voir toute les méthodes que l'on peut appliquer à un node :https://api.drupal.org/api/drupal/core%21modules%21node%21src%21Entity%21Node.php/8.9.x
On trouve notamment : getType(), getTitle(), setTitle(), getCreatedTime(), setCreatedTime(), isPromoted(), setPromoted(), isSticky(), setSticky(), isPublished(), setPublished(), getOwner(), getOwnerId(), setOwnerId($uid)....
Si nous voulons par exemple modifier le titre du node que nous avions chargé et le promouvoir sur la page d'accueil nous ferions :
$entity->setTitle("Mon nouveau titre");
$entity->setPromoted(true);
Récupérer les champs de l'entité
Les bases
Dans cette partie, nous allons parler des champs créé pour une entité. Pour récupérer leur contenu, on peut utiliser la méthode get('nom_machine_du_champs')
Par exemple, si vous avez créé un champ avec une étiquette "adresse" et dont le nom machine est "field_adresse" alors vous pouvez récupérer sa valeur avec
$entity->get('field_adresse')
La méthode get() peut vous retourner soit une chaîne de caractères, soit un tableau, selon la valeur du champs
Récupérer une entité référencée
Imaginons que vous avez deux types de contenus : des villes et des départements. Le type de contenu "ville" possède un champ référence qui indique le département auquel appartient la ville (field_departement). Quand vous chargez la ville, vous récupérer automatiquement un tableau qui contient les entités référencées, ici le département.
$entity->get('field_departement')->referencedEntities()
Attention, referencedEntities retourne un tableau. Si vous souhaitez récupérer un champ de l'entité référencée, vous devez ciblé l'élément du tableau. Par exemple :
$entity->get('field_departement')->referencedEntities()[0]->title
//ou
$departements=$entity->get('field_departement')->referencedEntities()
foreach($departements as $dep){
$listedept[]=$dep->title()
}
Modifier les champs de l'entité
Pour modifier un champ d'une entité on peut utiliser la méthode set('nom_machine_du_champs', valeur)
Par exemple pour modifier le champs body du node que nous avions chargé, nous ferions
$entity->set('body', "Mon nouveau contenu d'article");
Il est possible de déterminer un format de sauvegarde. Par exemple pour avoir un format html :
$entity->set('body', ["value"=>"Mon nouveau contenu d'article", "format"=>"full_html"]);
Sauver les modifications
Une fois les modifications effectuées, il ne reste plus qu'à les sauvegarder avec la méthode save()
$entity->save();