web-dev-qa-db-fra.com

Comment accéder à une valeur de champ pour un objet entité (par exemple, un nœud)?

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?

62
dbj44

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.

95
Ashkar A.Rahman

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();
58
Matoeil

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).

35
tenken

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.

17
user49

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();
14
Swapnil Bijwe

Pour moi, avoir un $entity (un nœud) cela a fonctionné:

$entity->field_name->getValue();

en utilisant 8.1.

7
Alex

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();
6
Francis

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.

6
user72672
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

5
pwaterz