dans un module personnalisé drupal 8, comment puis-je obtenir un objet nœud si j'ai l'ID du nœud? J'ai essayé:
$node = new Node($nid);
$node->save();`
mais a obtenu cette erreur:
L'argument 1 passé à Drupal\Core\Entity\ContentEntityBase :: __ construct () doit être du type tableau, chaîne donnée,
Il y a plusieurs façons.
Si votre contexte permet injection de dépendance , injectez le entity_type.manager
service et utilisez-le comme ceci:
$node = $this->entityTypeManager->getStorage('node')->load($nid);
Sinon, vous pouvez toujours utiliser le entity_type.manager
un service:
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
Si vous préférez, vous pouvez utiliser directement la classe Node
:
$node = \Drupal\node\Entity\Node::load($nid);
Vous n'utilisez jamais new
pour créer une entité, chaque fois que vous devez la charger depuis la base de données ou la créer sans la charger depuis la base de données.
Dans le cas où vous souhaitez créer un nœud, vous utilisez Node::create()
, comme dans l'exemple de code suivant.
use Drupal\node\Entity\Node;
$settings = [
'body' => [
[
'value' => 'The node body is here.',
'format' => filter_default_format(),
],
],
'title' => 'The node title',
'type' => 'page',
'uid' => \Drupal::currentUser()->id(),
];
$node = Node::create($settings);
Si vous devez simplement charger un nœud à partir de la base de données en connaissant son ID de nœud, le code est beaucoup plus simple.
use Drupal\node\Entity\Node;
$node = Node::load($nid);
Si vous devez ensuite charger un nœud à partir de la base de données en connaissant d'autres propriétés, mais pas l'ID de nœud, vous pouvez utiliser le code suivant.
use Drupal\node\Entity\Node;
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties($values);
$nodes
est un tableau contenant zéro ou plusieurs nœuds, et $values
est un tableau décrivant les propriétés que vous connaissez.