Рейтинг:-1

Как получить доступ к защищенному значению сущности узла?

флаг in

У меня есть узел представления, и я использую приведенный ниже код для отображения объектов узла:

$node = \Drupal::entityTypeManager()
      ->getStorage('узел')
      ->загрузить несколько();
 дпм($узел);

возвращает следующий вывод:

введите описание изображения здесь

Я вижу свойства каждого узла. В этом я хочу получить доступ к target_id/value выделенного поля — field_cp_level2_ref_level3. Я попробовал следующую строку, и она выходит как null:

$node->field_cp_level2_ref_level3->target_id

Как получить доступ к этому значению поля?

miststudent2011 avatar
флаг fr
Does this answer your question? [8 - Node::load is generating an object with circular reference which is crashing kint() and var\_export()](https://drupal.stackexchange.com/questions/200046/8-nodeload-is-generating-an-object-with-circular-reference-which-is-crashing)
miststudent2011 avatar
флаг fr
When you want to dump it, just use $node->toArray() , Refer https://drupal.stackexchange.com/a/200118/71454
флаг in
@misstudent2011 @misstudent2011 Я не говорю, что моя страница падает из-за сгенерированной циклической ссылки. Я просто прошу способ доступа к защищенным значениям. Вопрос, на который вы ссылаетесь, мне не помогает.
miststudent2011 avatar
флаг fr
Вы просмотрели ответ по ссылке, которой я поделился? Он предоставляет вам способ получить защищенные значения. Кажется, у вас возникли трудности с его получением, позвольте мне вставить его как комментарий.
miststudent2011 avatar
флаг fr
Если вы хотите сбросить его, просто используйте `$node->toArray()`. Затем вы получаете массив с простыми значениями.Вы можете снова использовать эти имена полей и свойства для доступа к значениям объекта узла, например. `$node->ваше поле->значение.`
флаг in
Спасибо @miststudent2011, но выполнение $node->toArray возвращает следующую ошибку: «Ошибка: вызов функции-члена toArray() для массива». также выполнение $node->yourfield->value возвращает null :(
Рейтинг:0
флаг bd

Ваша проблема в том, что вы ошибочно принимаете результат loadMultiple быть объектом узла, когда вместо этого он возвращает массив объектов узла.

Вы должны быть в состоянии сделать это:

$nodes = \Drupal::entityTypeManager()
  ->getStorage('узел')
  ->загрузить несколько();
$ узел = сброс ($ узлы);

Теперь вы должны иметь доступ к значениям, которые вы видите в выводе отладки:

$node->field_cp_level2_ref_level3->target_id;

На самом деле немного сомнительно загружать все узлы, которые есть в вашей системе. Это может по-прежнему работать с вашими 294 узлами, но создаст проблемы на сайтах с большим количеством контента. Вместо этого вы должны добавить условия, например. используя loadByProperties на хранилище узла.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.