Arbeiten Sie mit einer Entität? Wenn ja: $fields = $entity->getFieldDefinitions();werde es tun. Ich bin nicht sicher, was das Äquivalent von field_info_instances()ist, FieldStorageConfigscheint kein einziges zu haben
Clive
Nein, ich möchte nur das Formular "node_type_edit_form" ändern und eine Liste von Feldern hinzufügen, die durch den Knotentyp im Formular definiert sind. Der Typ des Knotens ist also das einzige Argument, das ich habe. Also dachte ich, dass eine Funktion wie field_info_instances helfen könnte.
Pravin Ajaaz
@Clive: Kann ich ein Entitätsobjekt mit dem Namen des Entitätstyps erstellen? Es gibt eine Funktion NodeType :: load ('article'), die Objekte für Knotentypen erstellt.
Pravin Ajaaz,
\Drupal::entityManager()->getFieldDefinitions('node', 'article')hat den Job gemacht clive :)
Pravin Ajaaz
Antworten:
30
EntityManager wird in Zukunft nicht mehr weiterentwickelt. Folgendes kann stattdessen verwendet werden:
Gibt es eine Möglichkeit, nur eine cck-Feldliste abzurufen?
Rajesh Vishwakarma
2
Dies sollte jetzt die akzeptierte Antwort sein.
Bram
24
Ich habe es mit getFieldDefinitions()defined in erreicht Class EntityManager. Damit alle Felder in einem bestimmten Bündel verwendet werden, haben Sie folgende Möglichkeiten:
Dies funktioniert, aber entityManager ist veraltet. Der Kommentar über der Funktionsdefinition besagt "use entityTypeManager" oder wenn die Methode nicht implementiert ist (getFieldDefinitions ist nicht implementiert) ". Ich verstehe diesen Kommentar nicht. Wo finde ich die richtige Funktion?
Felix Eve
5
Um die nid, uuid, revisions, langcode, etcif($field->getFieldStorageDefinition()->isBaseField() == FALSE)
Basisfelder
1
Gibt es eine Möglichkeit, die Felddefinitionen für alle Arten von Inhaltstypen zu erhalten, nicht nur für einen?
Matt
1
@ leon.nk yes <code> if ($ field-> getFieldStorageDefinition () -> isBaseField () == FALSE) </ code> das ist genauer als <code> if (! empty ($ field_definition-> getTargetBundle ()) ) </ code>, um Basisfelder herauszufiltern.
Hanmant
5
EntityManager ist veraltet und ich habe den nächsten Code verwendet. Ich habe der Controller-Klasse hinzugefügt:
/**
* 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'));}
Einige Tipps: Verwenden Sie in Konstruktoren (und im Allgemeinen) immer Interfaces. Die meisten Implementierungen von Drupal-Diensten haben klar definierte Schnittstellen.
$fields = $entity->getFieldDefinitions();
werde es tun. Ich bin nicht sicher, was das Äquivalent vonfield_info_instances()
ist,FieldStorageConfig
scheint kein einziges zu haben\Drupal::entityManager()->getFieldDefinitions('node', 'article')
hat den Job gemacht clive :)Antworten:
EntityManager wird in Zukunft nicht mehr weiterentwickelt. Folgendes kann stattdessen verwendet werden:
quelle
Ich habe es mit
getFieldDefinitions()
defined in erreichtClass EntityManager
. Damit alle Felder in einem bestimmten Bündel verwendet werden, haben Sie folgende Möglichkeiten:Das obige
$bundle_fields
enthältnid, uuid, revisions, langcode, etc
aber auch als Felder. Um eine genaue Ausgabe zu erhalten, habe ich Folgendes getan:quelle
nid, uuid, revisions, langcode, etc
if($field->getFieldStorageDefinition()->isBaseField() == FALSE)
EntityManager ist veraltet und ich habe den nächsten Code verwendet. Ich habe der Controller-Klasse hinzugefügt:
// Hier einige deiner Funktionen
}
https://www.drupal.org/node/2549139 es wurde mir geholfen
quelle