Рейтинг:0

Оптимальный способ получить определение поля типа контента

флаг in

Когда мне нужно определение поля типа контента в Drupal 8+, я запускал следующий код (для получения поля «тело» в типе контента «страница»):

$page_fields = \Drupal::getContainer()->get('entity_field.manager')
               ->getFieldDefinitions('узел', 'страница'); 
$body_definition = $page_fields['body'];

Я узнал, что это также возможно, запустив следующий код:

$body_definition = \Drupal::entityTypeManager()
                  ->getStorage('field_config')
                  ->загрузить('узел.страница.тело');

Теперь мой вопрос: в чем преимущество одного над другим? Последнее, конечно, всего одна строчка, но я думаю, что это не может быть концом истории. Является ли один из этих способов «Путь Drupal»?

Рейтинг:2
флаг cn

Определения полей могут быть определены в разных местах. Первый пример кода получает все определения, второй пример кода — только конкретное определение поля и находит только настроенные поля.

Обслуживание entity_field.manager отвечает за обнаружение полей в нескольких местах, конфигурацию и множество различных методов в коде, которые могут быть расширены в будущем, чтобы найти еще больше. Таким образом, использование этого сервиса является наиболее универсальным способом получения определений полей.

Использовать \Друпал только в крючках, а не в классах. И тогда вы можете ссылаться на службы через \Drupal::service('entity_field.manager'), вам не нужно получать контейнер.

Paul avatar
флаг in
Большое спасибо, 4k4. Из любопытства, где еще может быть определено поле, если не в конфигурации (db)? Включает ли это файлы конфигурации, например, если в (еще не импортированном) файле yml было определено поле?
4uk4 avatar
флаг cn
Нет, полевой менеджер не читает файлы YAML напрямую, а только активную конфигурацию в db. Обычно базовые поля определяются в классе сущностей, а поля пакетов — в config. Но есть много других способов создания или изменения определений полей. Например, поля пакета также могут быть определены в классе сущностей. Тоже на крючках. Но это редко используется.

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

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