Apakah Anda bekerja dengan suatu entitas? Jika demikian: $fields = $entity->getFieldDefinitions();akan melakukannya. Saya tidak yakin apa yang sederajat dengannya field_info_instances(), FieldStorageConfigtampaknya tidak memilikinya
Clive
Tidak, saya hanya ingin mengubah node_type_edit_form dan menambahkan daftar bidang yang ditentukan oleh jenis simpul dalam formulir. Jadi tipe dari node adalah satu-satunya argumen yang saya miliki. Jadi saya pikir fungsi seperti field_info_instances mungkin membantu.
Pravin Ajaaz
@Clive: dapatkah saya membuat objek entitas menggunakan nama tipe entitas. Ada fungsi NodeType :: load ('article') yang membuat objek untuk tipe node.
Apakah ada cara untuk mendapatkan hanya daftar bidang cck?
Rajesh Vishwakarma
2
Ini harus menjadi jawaban yang diterima sekarang.
Bram
25
Saya mencapainya menggunakan getFieldDefinitions()didefinisikan dalam Class EntityManager. Jadi agar semua bidang digunakan dalam bundel tertentu, Berikut adalah caranya:
Padahal di atas $bundle_fieldsjuga berisi nid, uuid, revisions, langcode, etcsebagai bidang. Jadi untuk mendapatkan hasil yang akurat saya melakukan sesuatu seperti ini:
Ini berfungsi, namun entitasManager tidak digunakan lagi. Komentar di atas definisi fungsi mengatakan gunakan entitasTypeManager atau jika metode ini tidak diterapkan (getFieldDefinitions tidak) "lihat \ Drupal \ Core \ Entity \ EntityManager yang sudah usang untuk menemukan antarmuka atau layanan yang benar." Saya tidak mengerti komentar ini. Di mana saya dapat mencari fungsi yang benar untuk digunakan?
Felix Eve
5
Untuk memfilter bidang dasar ( nid, uuid, revisions, langcode, etc), Anda dapat melakukannyaif($field->getFieldStorageDefinition()->isBaseField() == FALSE)
leon.nk
1
Apakah ada cara untuk mendapatkan Definisi Bidang ke semua jenis jenis konten, bukan hanya satu?
Matt
1
@ leon.nk ya <code> if ($ field-> getFieldStorageDefinition () -> isBaseField () == FALSE) </code> itu lebih tepat daripada <code> jika (! kosong ($ field_definition-> getTargetBundle ()) ) </code> untuk memfilter bidang dasar.
Hanmant
6
EntityManager sudah usang dan saya menggunakan kode berikutnya. Saya menambahkan ke kelas 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'));}
Beberapa tips: Dalam konstruktor (dan secara umum) gunakan selalu antarmuka. Sebagian besar implementasi layanan drupal memiliki antarmuka yang terdefinisi dengan baik.
$fields = $entity->getFieldDefinitions();
akan melakukannya. Saya tidak yakin apa yang sederajat dengannyafield_info_instances()
,FieldStorageConfig
tampaknya tidak memilikinya\Drupal::entityManager()->getFieldDefinitions('node', 'article')
melakukan pekerjaan clive :)Jawaban:
EntityManager sudah usang bergerak maju. Berikut ini dapat digunakan sebagai gantinya:
sumber
Saya mencapainya menggunakan
getFieldDefinitions()
didefinisikan dalamClass EntityManager
. Jadi agar semua bidang digunakan dalam bundel tertentu, Berikut adalah caranya:Padahal di atas
$bundle_fields
juga berisinid, uuid, revisions, langcode, etc
sebagai bidang. Jadi untuk mendapatkan hasil yang akurat saya melakukan sesuatu seperti ini:sumber
nid, uuid, revisions, langcode, etc
), Anda dapat melakukannyaif($field->getFieldStorageDefinition()->isBaseField() == FALSE)
EntityManager sudah usang dan saya menggunakan kode berikutnya. Saya menambahkan ke kelas Controller:
// Di sini beberapa fungsi Anda
}
https://www.drupal.org/node/2549139 itu membantu saya
sumber