Travaillez-vous avec une entité? Si oui: le $fields = $entity->getFieldDefinitions();fera. Je ne suis pas sûr de ce que l'équivalent de field_info_instances(), FieldStorageConfigne semble pas en avoir un
Clive
Non, je veux juste modifier le node_type_edit_form et ajouter une liste de champs définis par le type de noeud dans le formulaire. Donc, le type du nœud est le seul argument que j'ai. J'ai donc pensé qu'une fonction comme field_info_instances pourrait aider.
Pravin Ajaaz
@Clive: puis-je créer un objet entité en utilisant le nom du type d'entité. Il existe une fonction NodeType :: load ('article') qui crée un objet pour les types de nœuds.
Pravin Ajaaz
\Drupal::entityManager()->getFieldDefinitions('node', 'article')a fait le boulot :)
Pravin Ajaaz
Réponses:
31
EntityManager est obsolète à l'avenir. Les éléments suivants peuvent être utilisés à la place:
Existe-t-il un moyen d'obtenir uniquement la liste des champs cck?
Rajesh Vishwakarma
2
Cela devrait être la réponse acceptée maintenant.
Bram
25
Je l'ai atteint en utilisant getFieldDefinitions()défini dans Class EntityManager. Donc, pour obtenir tous les champs utilisés dans un bundle particulier, voici un moyen:
Bien que ce qui précède $bundle_fieldscontienne également des nid, uuid, revisions, langcode, etcchamps. Donc, pour obtenir une sortie précise, j'ai fait quelque chose comme ceci:
Cela fonctionne, cependant entityManager est déconseillé. Le commentaire au-dessus de la définition de la fonction indique utiliser entityTypeManager ou si la méthode n'est pas implémentée (getFieldDefinitions ne l'est pas) "voir le \ Drupal \ Core \ Entity \ EntityManager déconseillé pour trouver l'interface ou le service correct." Je ne comprends pas ce commentaire. Où puis-je chercher pour trouver la fonction correcte à utiliser?
Felix Eve
5
Pour filtrer les champs de base ( nid, uuid, revisions, langcode, etc), vous pouvez le faireif($field->getFieldStorageDefinition()->isBaseField() == FALSE)
leon.nk
1
Existe-t-il un moyen d'obtenir les définitions de champ pour tous les types de types de contenu, pas un seul?
Matt
1
@ leon.nk yes <code> if ($ field-> getFieldStorageDefinition () -> isBaseField () == FALSE) </code> qui est plus précis que <code> if (! empty ($ field_definition-> getTargetBundle ()) ) </code> pour filtrer les champs de base.
Hanmant
6
EntityManager est obsolète et j'ai utilisé le code suivant. J'ai ajouté à la 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'));}
Quelques conseils: Dans les constructeurs (et en général) utilisez toujours des interfaces. La plupart des implémentations de service drupal ont des interfaces bien définies.
$fields = $entity->getFieldDefinitions();
fera. Je ne suis pas sûr de ce que l'équivalent defield_info_instances()
,FieldStorageConfig
ne semble pas en avoir un\Drupal::entityManager()->getFieldDefinitions('node', 'article')
a fait le boulot :)Réponses:
EntityManager est obsolète à l'avenir. Les éléments suivants peuvent être utilisés à la place:
la source
Je l'ai atteint en utilisant
getFieldDefinitions()
défini dansClass EntityManager
. Donc, pour obtenir tous les champs utilisés dans un bundle particulier, voici un moyen:Bien que ce qui précède
$bundle_fields
contienne également desnid, uuid, revisions, langcode, etc
champs. Donc, pour obtenir une sortie précise, j'ai fait quelque chose comme ceci:la source
nid, uuid, revisions, langcode, etc
), vous pouvez le faireif($field->getFieldStorageDefinition()->isBaseField() == FALSE)
EntityManager est obsolète et j'ai utilisé le code suivant. J'ai ajouté à la classe Controller:
// Voici quelques fonctions
}
https://www.drupal.org/node/2549139 il m'a été aidé
la source