Как получить доступ к значению поля для объекта объекта (например, узла)?
node_load((int) $nid)
загружает полностью заполненный объект узла. $node->title->value
получает заголовок, но как мне получить доступ к значениям полей в Drupal 8?
9 ответов
Я думаю, вам не нужно преобразовывать $entity
в массив,
это будет просто работать.
$entity->get('field_name')->getValue();
FYI: Используя kint()
из модуля devel_kint
, вы узнаете все доступные методы, которые могут быть использованы для доступа к элементам объекта, поэтому сравнительно var_dump()
менее полезен.
в drupal 8, узел $ узла узла класса
$node->field_machine_name->getValue();
или
$node->get('field_machine_name')->getValue();
вернет массив значений.
Если вы ожидаете только одного, вы можете также укрепить массив с помощью
$node->field_machine_name->getString();
или
$node->get('field_machine_name')->getString();
Вы всегда можете сделать $entity->toArray()
, чтобы узнать, что находится в сущности. Даже при использовании xdebug (например, с phpstorm), имеющего смысл объекта объекта сам по себе, очень сложно. Я сомневаюсь, что dsm($node)
в Drupal 8 имеет смысл. Если вы настаиваете на отладке в браузере (но вы не должны, Drupal 8 слишком сложна для отладки без xdebug) dsm($node->toArray())
- это то, что вы хотите.
Для меня это имело $entity
(узел):
$entity->field_name->getValue();
, используя 8.1.
Используйте следующий фрагмент кода для получения значений полей узла
Это используется для получения идентификатора узла из 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();
При использовании (фактический правильный путь):
$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
Существует модуль Contrib, который поможет вам сделать это только Значение поля Twig .