Réponses:
Je suppose que vous n'avez pas besoin de convertir $entity
en tableau, cela fonctionnerait simplement.
$entity->get('field_name')->getValue();
FYI: L'utilisation kint()
de ce devel_kint
module vous permettra de connaître toutes les méthodes disponibles pouvant être utilisées pour accéder aux éléments de l'objet. Par conséquent, cette méthode var_dump()
est moins utile.
getValue()
fonctionne pour moi (tous les deux sur 8.1.x et 8.2.x) voir la référence api
->getValue()
est générique et fonctionnera quel que soit le type de champ. Si vous utilisez ->value
, cela ne fonctionne que si la valeur du champ est stockée dans une value
propriété. Cela ne fonctionnera pas pour des types plus complexes (par exemple, date ou référence à une entité).
dans drupal 8, $ node étant un noeud de classe
$node->field_machine_name->getValue();
ou
$node->get('field_machine_name')->getValue();
retournera un tableau de valeurs.
Si vous n’en attendez qu’un seul, vous pouvez aussi bien hiérarchiser le tableau avec
$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 connaissez pas les noms de champs, je vous recommande d'installer le module Devel pour Drupal 8 et d'inspecter le nœud via like dsm($node)
.
Vous pouvez toujours $entity->toArray()
voir ce qu'il y a dans une entité. Même en utilisant xdebug (par exemple avec phpstorm), donner un sens à un objet entité est très difficile. Je doute que dsm($node)
Drupal 8 ait un sens. 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.
Drupal\Core\Entity\EntityInterface
a toArray
.
Utilisez l'extrait de code suivant pour obtenir les valeurs de champ de nœud
Ceci est utilisé pour obtenir l'identifiant du noeud à partir de l'URL
$nid = \Drupal::routeMatch()->getRawParameter($node_id);
Pour charger les données de nœud à 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 noeud.
$product_name = $node->getTitle();
Pour moi, avoir un $entity
(un noeud) cela a fonctionné:
$entity->field_name->getValue();
en utilisant 8.1.
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 une bonne description de l'accès aux valeurs de l'objet nœud https://www.frobiovox.com/posts/2016/03/28/simplify-drupal-8-field-value-calls.html
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 ->entity
sur le terrain, il charge automatiquement l'entité.
Si le champ peut contenir plusieurs références, vous pouvez toutes les récupérer comme ceci:
$entities = $entity->get('field_entity_reference')->referencedEntities();
Cela vous donnera un tableau d'entités.