Відповіді:
Я думаю, вам не потрібно перетворювати $entity
в масив, це просто спрацює.
$entity->get('field_name')->getValue();
FYI: Використання kint()
з devel_kint
модуля дозволить вам дізнатися всі доступні методи , які можуть бути використані для доступу до елементів об'єкта, тому порівняно var_dump()
менш корисно.
getValue()
працює для мене (як на 8.1.x, так і на 8.2.x) див. посилання на api
->getValue()
є загальним і буде працювати незалежно від типу поля. Якщо ви використовуєте ->value
, воно працює лише у тому випадку, якщо значення поля зберігається у value
властивості. Він не працюватиме для більш складних типів (наприклад, дата або посилання на об'єкт).
в drupal 8, $ 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
. Якщо ви не знаєте, що таке назви полів, я рекомендую встановити модуль Devel для Drupal 8 та перевірити вузол через like 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();
Це дасть вам масив сутностей.