Вы работаете с юридическим лицом? Если так: $fields = $entity->getFieldDefinitions();сделаем это. Я не уверен, что эквивалент field_info_instances(), FieldStorageConfigне кажется, имеет один
Клайв
Нет, я просто хочу изменить node_type_edit_form и добавить список полей, определенных типом узла в форме. Таким образом, тип узла - единственный аргумент, который у меня есть. Поэтому я подумал, что функция вроде field_info_instances может помочь.
Правин Аджаз
@Clive: могу ли я создать объект сущности, используя имя типа сущности. Есть функция NodeType :: load ('article'), которая создает объект для типов узлов.
Правин Аджаз
\Drupal::entityManager()->getFieldDefinitions('node', 'article')сделал работу clive :)
Правин Аджаз
Ответы:
31
EntityManager устарел, двигаясь вперед. Вместо этого можно использовать следующее:
Я добился этого, используя getFieldDefinitions()определенные в Class EntityManager. Итак, чтобы получить все поля, используемые в определенном пакете, вот способ:
Хотя вышесказанное $bundle_fieldsтакже содержит в nid, uuid, revisions, langcode, etcкачестве полей. Таким образом, чтобы получить точный вывод, я сделал что-то вроде этого:
Это работает, однако entityManager устарел. Комментарий выше определения функции говорит, что использовать entityTypeManager или, если метод не реализован (getFieldDefinitions нет), «посмотрите устаревший \ Drupal \ Core \ Entity \ EntityManager, чтобы найти правильный интерфейс или службу». Я не понимаю этот комментарий. Где я могу найти правильную функцию для использования?
Феликс Ив
5
Чтобы отфильтровать базовые поля ( nid, uuid, revisions, langcode, etc) вы можете сделатьif($field->getFieldStorageDefinition()->isBaseField() == FALSE)
leon.nk
1
Есть ли способ получить определения полей для всех типов контента, а не только для одного?
Мэтт
1
@ leon.nk yes <code> if ($ field-> getFieldStorageDefinition () -> isBaseField () == FALSE) </ code> это более точно, чем <code> if (! empty ($ field_definition-> getTargetBundle ()) ) </ code> для фильтрации базовых полей.
Hanmant
6
EntityManager устарел, и я использовал следующий код. Я добавил в класс контроллера:
/**
* The entity field manager.
*
* @var \Drupal\Core\Entity\EntityFieldManager
*/protected $entityFieldManager;/**
* Constructor.
*
* @param \Drupal\Core\Entity\EntityFieldManager $entity_field_manager
* The entity field manager.
*/publicfunction __construct(EntityFieldManager $entity_field_manager){
$this->entityFieldManager = $entity_field_manager;}/**
* {@inheritdoc}
*/publicstaticfunction create(ContainerInterface $container){returnnewstatic(
$container->get('entity_field.manager'));}
$fields = $entity->getFieldDefinitions();
сделаем это. Я не уверен, что эквивалентfield_info_instances()
,FieldStorageConfig
не кажется, имеет один\Drupal::entityManager()->getFieldDefinitions('node', 'article')
сделал работу clive :)Ответы:
EntityManager устарел, двигаясь вперед. Вместо этого можно использовать следующее:
источник
Я добился этого, используя
getFieldDefinitions()
определенные вClass EntityManager
. Итак, чтобы получить все поля, используемые в определенном пакете, вот способ:Хотя вышесказанное
$bundle_fields
также содержит вnid, uuid, revisions, langcode, etc
качестве полей. Таким образом, чтобы получить точный вывод, я сделал что-то вроде этого:источник
nid, uuid, revisions, langcode, etc
) вы можете сделатьif($field->getFieldStorageDefinition()->isBaseField() == FALSE)
EntityManager устарел, и я использовал следующий код. Я добавил в класс контроллера:
// Вот некоторые твои функции
}
https://www.drupal.org/node/2549139 мне помогло
источник