Respuestas:
Supongo que no necesita convertir $entity
en una matriz, esto simplemente funcionaría.
$entity->get('field_name')->getValue();
FYI: Usar kint()
desde el devel_kint
módulo le permitirá conocer todos los métodos disponibles que podrían usarse para acceder a los elementos del objeto, por lo que comparativamente var_dump()
es menos útil.
getValue()
funciona para mí (tanto en 8.1.xy 8.2.x) vea la referencia de la API
->getValue()
es genérico y funcionará independientemente del tipo de campo. Si lo usa ->value
, solo funciona si el valor del campo se almacena en una value
propiedad. No funcionará para tipos más complejos (por ejemplo, fecha o referencia de entidad).
en drupal 8, $ node es de clase nodo
$node->field_machine_name->getValue();
o
$node->get('field_machine_name')->getValue();
devolverá una matriz de valores.
Si espera solo uno, también podría encadenar la matriz con
$node->field_machine_name->getString();
o
$node->get('field_machine_name')->getString();
Para campos que debería poder usar, $node->body->value
por ejemplo. Si no sabe cuáles son los nombres de campo, recomiendo instalar el módulo Devel para Drupal 8 e inspeccionar el nodo a través de like dsm($node)
.
Siempre puede hacer $entity->toArray()
para ver qué hay en una entidad. Incluso cuando se usa xdebug (por ejemplo, con phpstorm) es muy difícil dar sentido a un objeto de entidad por sí solo. Dudo que dsm($node)
en Drupal 8 tenga sentido. Si insiste en la depuración en el navegador (pero no debería, Drupal 8 es demasiado complejo para depurar sin xdebug) dsm($node->toArray())
es lo que desea.
Use el siguiente fragmento de código para obtener valores de campo de nodo
Esto se utiliza para obtener la identificación del nodo de la url
$nid = \Drupal::routeMatch()->getRawParameter($node_id);
Para cargar datos de nodo usando nid
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
Esto se usa para obtener el valor del campo.
$terms = $node->get('field_Name')->getValue();
Esto se usa para obtener el título del nodo.
$product_name = $node->getTitle();
Para mí, tener un $entity
(un nodo) esto funcionó:
$entity->field_name->getValue();
utilizando 8.1.
use Drupal\node\Entity\Node
$node = Node::load($nid);
$title = $node->get('title')->value;
O
use Drupal\node\Entity\Node
$title = Node::load($nid)->get('title')->value;
Aquí es agradable escribir sobre el acceso a los valores del objeto de nodo https://www.frobiovox.com/posts/2016/03/28/simplify-drupal-8-field-value-calls.html
Es simplemente:
$node->get('field_name')->getValue();
Si el campo es un campo de referencia de entidad, hay algunas formas especiales de obtener las entidades referenciadas.
Para obtener la identificación de destino (primer elemento):
$entity->get('field_entity_reference')->target_id;
Para obtener la entidad cargada (primer elemento):
$entity->get('field_entity_reference')->entity;
Cuando se usa ->entity
en el campo, carga automáticamente la entidad.
Si el campo puede contener múltiples referencias, puede buscarlas todas de esta manera:
$entities = $entity->get('field_entity_reference')->referencedEntities();
Eso te dará una gran variedad de entidades.