Wie erhalte ich eine Liste der Felder, die in Entitäten verwendet werden?

7

Ich möchte alle Felder abrufen, die Entitäten verwenden (einschließlich gesperrter Felder).

Wie kann ich eine Liste der Felder abrufen, die in Entitäten verwendet werden?

Wie wir in Admin / Berichte / Felder bekommen.

Geben Sie hier die Bildbeschreibung ein

Ajay Reddy
quelle
Möchten Sie dies programmgesteuert tun oder die Verwendung von Feldern auf einer Site über die Benutzeroberfläche überprüfen?
autopoietic
Ich möchte dies programmatisch ..
Ajay Reddy

Antworten:

8

Ich würde EntityFieldManager :: getFieldMap empfehlen . Der EntityManager ist nur ein Dienst zum Bereitstellen von Funktionen aus anderen Klassen.

Aus der Dokumentation:

Rückgabewert

Array Ein nach Entitätstyp verschlüsseltes Array. Jeder Wert ist ein Array, dessen Schlüssel Feldnamen sind, und der Wert ist ein Array mit zwei Einträgen:

  • Typ : Der Feldtyp.
  • Bundles : Ein assoziatives Array der Bundles, in denen das Feld angezeigt wird, wobei die Schlüssel und Werte beide der Computername des Bundles sind.
Jimmy Ko
quelle
5

EntityFieldManagerInterface::getFieldMap() Erzeugt ein verschlüsseltes Array nach Entitätstyp> Feldname mit weiteren Informationen zum Feldtyp und den zugehörigen Bundles.

$field_map = \Drupal::entityManager()->getFieldMap();
$node_field_map = $field_map['node'];
$node_fields = array_keys($node_field_map['node']);

Es gibt auch, EntityFieldManagerInterface::getFieldDefinitions()wenn Sie weitere Feldmetadaten möchten. Es erzeugt ein Array von BaseFieldDefinition& FieldConfigObjekten, die Sie für weitere Details analysieren können.

  $node_article_fields  =\Drupal::entityManager()->getFieldDefinitions('node','article');
Shawn Conn
quelle
Danke Shawn, ich bekomme keine Felder wie im obigen Bild. Unter Feld bekomme ich:comment, contact_message, file, node, shortcut, taxonomy_term, user, menu_link_content
Ajay Reddy
Es gab einen Tippfehler mit dem Code. Wie in der Antwort erwähnt, erzeugt die Funktion ein verschlüsseltes Array, das Entitäten, Feldnamen und dann Felddetails enthält.
Shawn Conn
Die Methode 'entityManager' ist veraltet. Verwenden Sie stattdessen in den meisten Fällen \ Drupal :: entityTypeManager ()
JF Kiwad
2

field_info_instance()würde tun, was Sie wollen, aber wenn Sie in den Dokumenten schauen, werden Sie sehen, dass es in D8 zugunsten von veraltet ist

Field::fieldInfo()->getBundleInstance($entity_type, $bundle, $field_name).
autopoietisch
quelle
Vielen Dank für Ihre Antwort, aber ich muss eine Liste aller Felder erhalten, die nur verwendet werden. Ich möchte nicht nach Entitätstyp, Bundle und Feldname verwenden. Als Referenz zum Hochladen des Bildes.
Ajay Reddy