Answers:
我猜您不需要转换$entity
为数组,这将简单地工作。
$entity->get('field_name')->getValue();
仅供参考:kint()
从devel_kint
模块中使用将使您知道所有可用于访问对象元素的可用方法,因此相对而言,var_dump()
它的帮助较小。
getValue()
适用于我(在8.1.x和8.2.x上均适用)请参阅api参考
->getValue()
是通用的,无论字段类型如何都可以使用。如果使用->value
,则仅当字段值存储在value
属性中时才起作用。它不适用于更复杂的类型(例如日期或实体参考)。
在drupal 8中,$ node是类node
$node->field_machine_name->getValue();
要么
$node->get('field_machine_name')->getValue();
将返回一个值数组。
如果只期望一个,则最好用
$node->field_machine_name->getString();
要么
$node->get('field_machine_name')->getString();
对于字段,您应该可以使用$node->body->value
例如。如果您不知道字段名称是什么,我建议为Drupal 8 安装Devel模块,并通过like检查节点dsm($node)
。
您始终$entity->toArray()
可以查看实体中的内容。即使使用xdebug(例如,使用phpstorm),也很难使一个实体对象有意义。我怀疑dsm($node)
在Drupal 8中是否有意义。如果您坚持要在浏览器中进行调试(但您不应该这样做,那么Drupal 8太复杂了,如果不使用xdebug进行调试)dsm($node->toArray())
就是您想要的。
使用以下代码片段获取节点字段值
这用于从URL获取节点ID
$nid = \Drupal::routeMatch()->getRawParameter($node_id);
使用nid加载节点数据
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
这用于获取字段值。
$terms = $node->get('field_Name')->getValue();
这用于获取节点标题。
$product_name = $node->getTitle();
use Drupal\node\Entity\Node
$node = Node::load($nid);
$title = $node->get('title')->value;
要么
use Drupal\node\Entity\Node
$title = Node::load($nid)->get('title')->value;
这是有关从节点对象访问值的好文章https://www.frobiovox.com/posts/2016/03/28/simplify-drupal-8-field-value-calls.html
很简单:
$node->get('field_name')->getValue()
如果该字段是实体引用字段,则有一些特殊的方法来获取引用的实体。
要获取目标ID(第一个元素):
$entity->get('field_entity_reference')->target_id
要获取已加载的实体(第一个元素):
$entity->get('field_entity_reference')->entity
在->entity
现场使用时,它将自动加载实体。
如果该字段可以包含多个引用,则可以这样获取它们:
$entities = $entity->get('field_entity_reference')->referencedEntities();
这将为您提供一系列实体。