node_load((int) $nid)
charge une entité de noeud entièrement remplie. $node->title->value
obtient le titre, mais comment puis-je accéder aux valeurs des champs dans Drupal 8?
Je suppose que vous n'avez pas besoin de convertir $entity
En tableau, cela fonctionnerait simplement.
$entity->get('field_name')->getValue();
FYI: L'utilisation de kint()
à partir du module devel_kint
Vous permettra de connaître toutes les méthodes disponibles qui pourraient être utilisées pour accéder aux éléments de l'objet, donc comparativement var_dump()
est moins utile.
dans drupal 8, $ node étant de classe node
$node->field_machine_name->getValue();
ou
$node->get('field_machine_name')->getValue();
renverra un tableau de valeurs.
Si vous n’en attendez qu’un, vous pouvez aussi bien stringifier le tableau
$node->field_machine_name->getString();
ou
$node->get('field_machine_name')->getString();
Pour les champs, vous devriez pouvoir utiliser $node->body->value
Par exemple. Si vous ne savez pas quels sont les noms de champs, je vous recommande d'installer le module Devel pour Drupal 8 et d'inspecter le nœud via comme dsm($node)
.
Vous pouvez toujours faire $entity->toArray()
pour voir ce qui se trouve dans une entité. Même lorsque vous utilisez xdebug (par exemple avec phpstorm), donner un sens à un objet entité est très difficile. Je doute que dsm($node)
in Drupal 8 soit logique. Si vous insistez sur le débogage dans le navigateur (mais vous ne devriez pas, Drupal 8 est trop complexe pour déboguer sans xdebug) dsm($node->toArray())
est ce que vous voulez.
Utilisez l'extrait de code suivant pour obtenir les valeurs de champ de nœud
Ceci est utilisé pour obtenir l'identifiant du nœud à partir de l'URL
$nid = \Drupal::routeMatch()->getRawParameter($node_id);
Pour charger des données de noeud à l'aide de nid
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
Ceci est utilisé pour obtenir la valeur du champ.
$terms = $node->get('field_Name')->getValue();
Ceci est utilisé pour obtenir le titre du nœud.
$product_name = $node->getTitle();
Pour moi, avoir un $entity
(un nœud) cela a fonctionné:
$entity->field_name->getValue();
en utilisant 8.1.
Lors de l'utilisation (de la bonne façon):
$node = \Drupal\node\Entity\Node::load($nid);
$node->get('nid')->value; // returns a raw value - Node ID
// Following both returns array structure containing value/target id nested value.
$node->get('nid')->value();
$node->nid->getValue();
C'est simplement:
$node->get('field_name')->getValue();
Si le champ est un champ de référence d'entité, il existe des moyens spéciaux pour obtenir les entités référencées.
Pour obtenir l'id cible (premier élément):
$entity->get('field_entity_reference')->target_id;
Pour obtenir l'entité chargée (premier élément):
$entity->get('field_entity_reference')->entity;
Lors de l'utilisation de ->entity
sur le champ, il renvoie automatiquement l'entité chargée.
Si le champ peut contenir plusieurs références, vous pouvez les récupérer toutes comme ceci:
$entities = $entity->get('field_entity_reference')->referencedEntities();
Cela renverra un tableau d'entités.
use Drupal\node\Entity\Node
$node = Node::load($nid);
$title = $node->get('title')->value;
Ou
use Drupal\node\Entity\Node
$title = Node::load($nid)->get('title')->value;
Voici un article intéressant sur l'accès aux valeurs à partir de l'objet nœud https://www.frobiovox.com/posts/2016/03/28/simplify-drupal-8-field-value-calls.html