Czy pracujesz z bytem? Jeśli tak: $fields = $entity->getFieldDefinitions();zrobi to. Nie jestem pewien, co to jest odpowiednik field_info_instances(), FieldStorageConfigwydaje się , że nie ma
Clive
Nie. Chcę tylko zmienić formularz_typ_węzła i dodać w formularzu listę pól zdefiniowanych przez typ węzła. Zatem typ węzła jest jedynym argumentem, jaki mam. Pomyślałem więc, że funkcja taka jak field_info_instances może pomóc.
Pravin Ajaaz,
@Clive: czy mogę utworzyć obiekt encji przy użyciu nazwy typu encji. Istnieje funkcja NodeType :: load („artykuł”), która tworzy obiekty dla typów węzłów.
Działa to, jednak instanceManager jest przestarzały. Komentarz nad definicją funkcji mówi: użyj encjiTypeManager lub jeśli metoda nie jest zaimplementowana (getFieldDefinitions nie jest) „zobacz nieaktualne \ Drupal \ Core \ Entity \ EntityManager, aby znaleźć odpowiedni interfejs lub usługę.” Nie rozumiem tego komentarza. Gdzie mogę znaleźć odpowiednią funkcję?
Felix Eve
5
Aby odfiltrować pola podstawowe ( nid, uuid, revisions, langcode, etc), możesz to zrobićif($field->getFieldStorageDefinition()->isBaseField() == FALSE)
leon.nk
1
Czy istnieje sposób, aby uzyskać definicje pól dla wszystkich typów typów treści, a nie tylko jednego?
Matt
1
@ leon.nk tak <code> if ($ field-> getFieldStorageDefinition () -> isBaseField () == FALSE) </code> to jest bardziej precyzyjne niż <code> if (! empty ($ field_definition-> getTargetBundle ()) ) </code>, aby odfiltrować pola podstawowe.
Hanmant,
6
EntityManager jest przestarzały i użyłem następnego kodu. Dodałem do klasy 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();
zrobi to. Nie jestem pewien, co to jest odpowiednikfield_info_instances()
,FieldStorageConfig
wydaje się , że nie ma\Drupal::entityManager()->getFieldDefinitions('node', 'article')
wykonał robotę clive :)Odpowiedzi:
EntityManager jest przestarzały, aby przejść do przodu. Zamiast tego można użyć:
źródło
Osiągnąłem to używając
getFieldDefinitions()
zdefiniowanego wClass EntityManager
. Aby uzyskać wszystkie pola używane w danym pakiecie, oto sposób:Chociaż powyższe
$bundle_fields
zawiera równieżnid, uuid, revisions, langcode, etc
jako pola. Aby uzyskać dokładny wynik, zrobiłem coś takiego:źródło
nid, uuid, revisions, langcode, etc
), możesz to zrobićif($field->getFieldStorageDefinition()->isBaseField() == FALSE)
EntityManager jest przestarzały i użyłem następnego kodu. Dodałem do klasy Controller:
// Oto niektóre twoje funkcje
}
https://www.drupal.org/node/2549139 to mi pomogło
źródło