Как получить доступ к значению поля для объекта объекта (например, узла)?

node_load((int) $nid) загружает полностью заполненный объект узла. $node->title->value получает заголовок, но как мне получить доступ к значениям полей в Drupal 8?

43 голоса | спросил 24ma13wg 21 Jpm1000000pmWed, 21 Jan 2015 20:01:46 +030015 2015, 20:01:46

9 ответов


66

Я думаю, вам не нужно преобразовывать $entity в массив, это будет просто работать.

$entity->get('field_name')->getValue();

FYI: Используя kint() из модуля devel_kint, вы узнаете все доступные методы, которые могут быть использованы для доступа к элементам объекта, поэтому сравнительно var_dump() менее полезен.

ответил DropDragon 11 FebruaryEurope/MoscowbThu, 11 Feb 2016 14:53:53 +0300000000pmThu, 11 Feb 2016 14:53:53 +030016 2016, 14:53:53
37

в drupal 8, узел $ узла узла класса

 $node->field_machine_name->getValue();

или

$node->get('field_machine_name')->getValue();

вернет массив значений.

Если вы ожидаете только одного, вы можете также укрепить массив с помощью

$node->field_machine_name->getString();

или

 $node->get('field_machine_name')->getString();
ответил Matoeil 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 06 Sep 2016 18:30:35 +0300 2016, 18:30:35
30

Для полей вы можете, например, использовать $node->body->value. Если вы не знаете имена полей, я рекомендую установить модуль Devel для Drupal 8 и осмотреть узел через как dsm($node).

ответил tenken 21 Jpm1000000pmWed, 21 Jan 2015 20:19:08 +030015 2015, 20:19:08
14

Вы всегда можете сделать $entity->toArray(), чтобы узнать, что находится в сущности. Даже при использовании xdebug (например, с phpstorm), имеющего смысл объекта объекта сам по себе, очень сложно. Я сомневаюсь, что dsm($node) в Drupal 8 имеет смысл. Если вы настаиваете на отладке в браузере (но вы не должны, Drupal 8 слишком сложна для отладки без xdebug) dsm($node->toArray()) - это то, что вы хотите.

ответил 21 Jpm1000000pmWed, 21 Jan 2015 22:16:55 +030015 2015, 22:16:55
7

Для меня это имело $entity (узел):

$entity->field_name->getValue();

, используя 8.1.

ответил Alex 20 Maypm16 2016, 18:02:22
7

Используйте следующий фрагмент кода для получения значений полей узла

Это используется для получения идентификатора узла из 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();
ответил Swapnil Bijwe 1 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 01 Sep 2016 10:14:38 +0300 2016, 10:14:38
3

При использовании (фактический правильный путь):

$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();
ответил Francis 23 FebruaryEurope/MoscowbThu, 23 Feb 2017 02:20:18 +0300000000amThu, 23 Feb 2017 02:20:18 +030017 2017, 02:20:18
2
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

ответил pwaterz 9 FebruaryEurope/MoscowbThu, 09 Feb 2017 03:51:20 +0300000000amThu, 09 Feb 2017 03:51:20 +030017 2017, 03:51:20
0

Существует модуль Contrib, который поможет вам сделать это только Значение поля Twig .

ответил Manish Champsee 26 Jam1000000amThu, 26 Jan 2017 02:57:21 +030017 2017, 02:57:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132