¿Estás trabajando con una entidad? Si es así: $fields = $entity->getFieldDefinitions();lo haré. No estoy seguro de cuál es el equivalente field_info_instances(), FieldStorageConfigno parece tener uno
Clive
No, solo quiero alterar el node_type_edit_form y agregar una lista de campos definidos por el tipo de nodo en el formulario. Entonces, el tipo de nodo es el único argumento que tengo. Entonces pensé que una función como field_info_instances podría ayudar.
Pravin Ajaaz
@Clive: ¿puedo crear un objeto de entidad usando el nombre del tipo de entidad? Hay una función NodeType :: load ('artículo') que crea objetos para tipos de nodos.
Pravin Ajaaz
\Drupal::entityManager()->getFieldDefinitions('node', 'article')hizo el trabajo clive :)
Pravin Ajaaz
Respuestas:
31
EntityManager está en desuso en adelante. En su lugar, se puede usar lo siguiente:
¿Hay alguna manera de obtener solo la lista de campos cck?
Rajesh Vishwakarma
2
Esta debería ser la respuesta aceptada ahora.
Bram
25
Lo logré usando getFieldDefinitions()definido en Class EntityManager. Entonces, para obtener todos los campos utilizados en un paquete particular, esta es una manera:
Aunque lo anterior $bundle_fieldstambién contiene nid, uuid, revisions, langcode, etccomo campos. Entonces, para obtener una salida precisa, hice algo como esto:
Esto funciona, sin embargo, entityManager está en desuso. El comentario sobre la definición de la función dice use entityTypeManager o si el método no está implementado (getFieldDefinitions no lo está) "vea el \ Drupal \ Core \ Entity \ EntityManager en desuso para encontrar la interfaz o servicio correcto". No entiendo este comentario. ¿Dónde puedo buscar para encontrar la función correcta para usar?
Felix Eve
55
Para filtrar los campos base ( nid, uuid, revisions, langcode, etc), puede hacerloif($field->getFieldStorageDefinition()->isBaseField() == FALSE)
leon.nk
1
¿Hay alguna forma de obtener las Definiciones de campo para todos los tipos de contenido, no solo para uno?
Matt
1
@ leon.nk yes <code> if ($ field-> getFieldStorageDefinition () -> isBaseField () == FALSE) </code> que es más preciso que <code> if (! empty ($ field_definition-> getTargetBundle ()) ) </code> para filtrar los campos base.
Hanmant
6
EntityManager está en desuso y utilicé el siguiente código. Agregué a la clase 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'));}
Algunos consejos: en los constructores (y en general) use siempre interfaces. La mayoría de las implementaciones del servicio drupal tienen interfaces bien definidas.
$fields = $entity->getFieldDefinitions();
lo haré. No estoy seguro de cuál es el equivalentefield_info_instances()
,FieldStorageConfig
no parece tener uno\Drupal::entityManager()->getFieldDefinitions('node', 'article')
hizo el trabajo clive :)Respuestas:
EntityManager está en desuso en adelante. En su lugar, se puede usar lo siguiente:
fuente
Lo logré usando
getFieldDefinitions()
definido enClass EntityManager
. Entonces, para obtener todos los campos utilizados en un paquete particular, esta es una manera:Aunque lo anterior
$bundle_fields
también contienenid, uuid, revisions, langcode, etc
como campos. Entonces, para obtener una salida precisa, hice algo como esto:fuente
nid, uuid, revisions, langcode, etc
), puede hacerloif($field->getFieldStorageDefinition()->isBaseField() == FALSE)
EntityManager está en desuso y utilicé el siguiente código. Agregué a la clase Controller:
// Aquí algunas de tus funciones
}
https://www.drupal.org/node/2549139 me ayudó
fuente