Saya memindahkan modul dari Drupal 7 ke Drupal 8. Dalam pengaturan konfigurasi modul ini saya perlu mendapatkan daftar tipe-bidang yang saat ini ada.
Dalam Drupal 7, ini dicapai menggunakan field_info_field_types()
fungsi.
Dalam Drupal 8 (8.0.0-rc3), saya mendapatkan kesalahan "fungsi tidak ada", meskipun informasi yang dinyatakan oleh halaman Bantuan Referensi API Drupal , jelas ketinggalan zaman.
Kemudian menyelidiki saya menemukan halaman DrupalContrib , di mana fungsinya dinyatakan usang, dan mengusulkan untuk sekarang menggunakan Drupal::service('plugin.manager.entity.field.field_type')->getDefinitions()
.
Tetapi menggunakannya memicu kesalahan lain "Layanan tidak dikenal plugin.manager.entity.field.field_type", untungnya terkait dengan saran "Apakah maksud Anda plugin.manager.field.field_type?"
Jadi saya mencoba menggunakan Drupal::service('plugin.manager.field.field_type')->getDefinitions()
dan wow: Saya mendapatkan array tipe field yang diharapkan.
Tetapi setiap anggota array (satu tipe lapangan) sekarang menjadi objek (bukan array anak), dan data yang saya cari bersarang di dalam properti yang dilindungi, jadi saya tidak dapat mengaksesnya.
Pada tahap ini, saya mandek. Saya menganggap mungkin ada beberapa kelas yang bisa saya kembangkan untuk bernavigasi melalui data ini, tetapi tanpa hasil: Saya bahkan tidak dapat menemukan komponen dalam Drupal 8 di mana definisi tipe bidang terpusat.
Jawaban:
Level pertama adalah array. Kuncinya adalah id plugin. Anda dapat mencantumkannya:
Ini hasilnya:
Anda dapat memilih satu dan membuang definisi plugin.
Jika Anda tertarik pada objek khusus, Anda dapat menggali lebih dalam dengan bantuan api.drupal.org. Tetapi akan lebih mudah, jika Anda mencari plugin di direktori inti.
Untuk mengakses objek, temukan di var_dump dan gunakan metode:
Dalam hal ini, itu adalah objek TransknownMarkup , yang memiliki metode render untuk mengakses string yang diterjemahkan.
sumber
label
,description
danmodule
dan menampilkannya dalam bentuk konfigurasi di mana pengguna dapat memeriksa yang diinginkannya modul saya ( MMS ) membuat token kloning untuk bidang terkait.Setiap string yang melewati t () adalah objek sekarang. Anda dapat mengaksesnya sebagai string, sebenarnya, Anda harus melakukannya.
Hanya ada sangat sedikit pengecualian di mana Anda tidak bisa hanya menggunakan objek apa adanya, misalnya kunci array, bagi mereka, Anda perlu melemparkannya ke string. Yang lainnya harusnya bekerja.
PS: Dokumentasi API resmi adalah http://api.drupal.org/api/drupal/8 . Gunakan itu untuk inti.
Sumber lain yang bagus adalah catatan perubahan: https://www.drupal.org/list-changes/published?keywords_description=field_info_field_types&to_branch=&version=&created_op=%3E%3D&created%5Bvalue%5D=&created%5B5%%5==created 5D =
Sunting: Menanggapi komentar Anda, saya tidak begitu mengerti apa yang Anda maksud. Semua informasi yang Anda butuhkan ada di sana, gunakan saja.
Sekali lagi, abaikan saja bahwa label / deskripsi adalah objek. Mereka memiliki metode __toString () yang secara otomatis dipanggil ketika Anda mencetak / menggunakannya.
sumber
label
,description
,module
string dari masing-masing bidang-jenis) saya harus: 1) mendapatkan daftar dariDrupal::service('plugin.manager.field.field_type')->getDefinitions()
seperti yang sudah dilakukan; 2) kemudian gunakan setiap kunci array yang dikembalikan (nama tipe lapangan) untuk memanggil kelas tertentu (temukan yang mana, dan di mana, apa yang harus saya periksa lebih dalam) yang akan memberikan metode untuk mendapatkan info yang dibutuhkan? TIA untuk ketepatan ini.$definition
bukan array dari string di D8, tetapi sebuah array objek! Saya menggunakan dpm () untuk memeriksa mereka, dan melihat bahwa masing-masing string yang dibutuhkan muncul bersarang cara ini:'label' => array(..., 'label' => Drupal\Core\StringTranslation\TranslatableMarkup Object {..., string, ...}, ...)
. Apakah saya kehilangan sesuatu yang jelas?TranslatableMarkup
kelas, dan ketersediaanrender()
metode. Akhirnya cara yang benar untuk mendapatkan data saya adalahprint $definition['label']->render();
. Namun demikian, terima kasih atas informasi Anda yang lain.Versi terbaru untuk jawaban @Berdir. Gunakan di shell.
Keluaran di sini: https://gist.github.com/sobi3ch/70635cc62defff606242
sumber
Google sepertinya menemukan Pertanyaan ini ketika mencari ini
Jika Anda menggunakan Konsol Drupal, Anda juga dapat menggunakan:
Ada juga ini di Drupal.org yang juga dapat membantu:
Menentukan dan menggunakan definisi Bidang Entitas Konten
Ini tidak mudah menemukan contoh yang bisa digunakan
sumber