Ответы:
Я думаю, вам не нужно преобразовывать $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->field_machine_name->getValue();
или же
$node->get('field_machine_name')->getValue();
вернет массив значений.
Если вы ожидаете только один, вы можете также привести в соответствие массив с
$node->field_machine_name->getString();
или же
$node->get('field_machine_name')->getString();
Для полей вы должны быть в состоянии использовать, $node->body->valueнапример. Если вы не знаете, как называются поля, я рекомендую установить модуль Devel для Drupal 8 и проверить узел с помощью лайков dsm($node).
Вы всегда $entity->toArray()можете посмотреть, что в сущности. Даже при использовании xdebug (например, с phpstorm) разобраться в сущности объекта сущности очень сложно. Я сомневаюсь, что dsm($node)в Drupal 8 есть какой-то смысл. Если вы настаиваете на отладке в браузере (но не должны этого делать, Drupal 8 слишком сложен, чтобы отлаживать без xdebug), то dsm($node->toArray())это то, что вам нужно.
Drupal\Core\Entity\EntityInterfaceесть toArray.
Используйте следующий фрагмент кода, чтобы получить значения полей узла
Это используется для получения идентификатора узла из URL
$nid = \Drupal::routeMatch()->getRawParameter($node_id);
Чтобы загрузить данные узла, используя nid
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
Это используется для получения значения поля.
$terms = $node->get('field_Name')->getValue();
Это используется для получения заголовка узла.
$product_name = $node->getTitle();
Для меня $entity(узел) это сработало:
$entity->field_name->getValue();
используя 8.1.
При использовании (актуальный правильный путь):
$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();
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();
Если поле является ссылочным полем сущности, есть несколько специальных способов получить ссылочные сущности.
Чтобы получить целевой идентификатор (первый элемент):
$entity->get('field_entity_reference')->target_id;
Чтобы получить загруженный объект (первый элемент):
$entity->get('field_entity_reference')->entity;
При использовании ->entityна поле он автоматически загружает объект.
Если поле может содержать несколько ссылок, вы можете получить их все так:
$entities = $entity->get('field_entity_reference')->referencedEntities();
Это даст вам массив сущностей.