Ответы:
Я думаю, вам не нужно преобразовывать $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();
Это даст вам массив сущностей.