Você está trabalhando com uma entidade? Se sim: $fields = $entity->getFieldDefinitions();fará isso. Não sei ao certo qual é o equivalente field_info_instances(), FieldStorageConfignão parece ter um
Clive
Não, eu só quero alterar o node_type_edit_form e adicionar uma lista de campos definidos pelo tipo de nó no formulário. Portanto, o tipo do nó é o único argumento que tenho. Então, pensei que funções como field_info_instances podem ajudar.
Pravin Ajaaz
@Clive: posso criar um objeto de entidade usando o nome do tipo de entidade. Existe uma função NodeType :: load ('article') que cria um objeto para os tipos de nós.
Pravin Ajaaz
\Drupal::entityManager()->getFieldDefinitions('node', 'article')fez o Clive trabalho :)
Pravin Ajaaz
Respostas:
31
O EntityManager está obsoleto no futuro. Em vez disso, pode ser usado o seguinte:
Existe alguma maneira de obter apenas a lista de campos cck?
Rajesh Vishwakarma
2
Essa deve ser a resposta aceita agora.
Bram
25
Eu consegui usando getFieldDefinitions()definido em Class EntityManager. Portanto, para obter todos os campos usados em um pacote específico, aqui está uma maneira:
Isso funciona, no entanto, o entityManager está obsoleto. O comentário acima da definição da função diz use entityTypeManager ou se o método não for implementado (getFieldDefinitions não é) "consulte o \ Drupal \ Core \ Entity \ EntityManager descontinuado para encontrar a interface ou o serviço correto." Eu não entendo esse comentário. Onde posso procurar a função correta a ser usada?
Felix Eve
5
Para filtrar os campos base ( nid, uuid, revisions, langcode, etc), você pode fazerif($field->getFieldStorageDefinition()->isBaseField() == FALSE)
leon.nk
1
Existe uma maneira de obter as Definições de campo para todos os tipos de conteúdo e não apenas um?
Matt
1
@ leon.nk yes <code> if ($ field-> getFieldStorageDefinition () -> isBaseField () == FALSE) </code> que é mais preciso que <code> if (! empty ($ field_definition-> getTargetBundle ()) ) </code> para filtrar os campos base.
Hanmant
6
O EntityManager está obsoleto e usei o próximo código. Eu adicionei à classe Controller:
/**
* 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();
fará isso. Não sei ao certo qual é o equivalentefield_info_instances()
,FieldStorageConfig
não parece ter um\Drupal::entityManager()->getFieldDefinitions('node', 'article')
fez o Clive trabalho :)Respostas:
O EntityManager está obsoleto no futuro. Em vez disso, pode ser usado o seguinte:
fonte
Eu consegui usando
getFieldDefinitions()
definido emClass EntityManager
. Portanto, para obter todos os campos usados em um pacote específico, aqui está uma maneira:Embora o acima
$bundle_fields
também contenhanid, uuid, revisions, langcode, etc
como campos. Então, para obter uma saída precisa, fiz algo assim:fonte
nid, uuid, revisions, langcode, etc
), você pode fazerif($field->getFieldStorageDefinition()->isBaseField() == FALSE)
O EntityManager está obsoleto e usei o próximo código. Eu adicionei à classe Controller:
// Aqui algumas das suas funções
}
https://www.drupal.org/node/2549139 me ajudou
fonte