Saya sedang membangun modul khusus di Drupal 8. Ini mencakup beberapa file konfigurasi YAML.
Ketika saya mengembangkan saya perlu mengubah dan menambahkan ke konfigurasi, misalnya untuk menambah bidang lain ke entitas kustom saya.
Saat ini satu-satunya cara yang saya temukan untuk membuat Drupal memperhatikan perubahannya adalah mencopot modul dan menginstalnya kembali.
Apakah ada cara untuk mendapatkan Drupal untuk memeriksa apakah file konfigurasi yang disediakan oleh modul sama dengan konfigurasi aktif, dan jika tidak, perbarui konfigurasi aktif? Bagaimana pembaruan modul ditangani? Di D7 hook_update_N
akan digunakan untuk menambahkan bidang menggunakan PHP, tetapi sepertinya ini harus ditangani oleh CM di D8?
Hal yang saya coba setelah memperbarui file yml di modul:
drush cr
, konfigurasi sinkronisasi.secara manual menyalin semua file konfigurasi yang diperbarui ke
sites/default/files/config_XXX/staging/
- tetapi ini memberikan kesalahan ini "Konfigurasi bertahap tidak dapat diimpor, karena berasal dari situs yang berbeda dari situs ini. Anda hanya dapat menyinkronkan konfigurasi antara contoh hasil kloning dari situs ini." .mengimpor file satu per satu secara manual menggunakan pengelola konfigurasi. Ini berfungsi, tetapi jelas harus ada cara yang lebih otomatis.
[EDIT] secara manual menggunakan modul config_update untuk memeriksa perubahan dan 'mengembalikan' ke konfigurasi modul. Sekali lagi, ini manual.
EDIT: Dari Mengelola konfigurasi - lakukan dan tidak boleh dilakukan
TIDAK
Cobalah untuk mengubah konfigurasi aktif di situs Anda dengan mengubah file di direktori config / install modul. Ini TIDAK akan berfungsi karena Drupal hanya akan membaca dari direktori itu ketika modul diinstal.
... tetapi perubahan akan terjadi, kecuali modul terikat pada konfigurasi apa pun yang mereka butuhkan pada rilis pertama mereka, dan mungkin tidak akan pernah memperbarui atau menambah konfigurasi.
Terima kasih sebelumnya.
sumber
hook_update_N
saya anggap, tapi saya tidak yakin apahook_update_N
. Artikel bagus tentang Drupal 8 untuk situs kecil (dan bagian 2 ). Di D8 "situs memiliki konfigurasinya, bukan modul" .Jawaban:
Seperti disebutkan dalam pertanyaan awal, dan komentar lanjutan, ada beragam modul contrib dan metode manual untuk mencapai hal ini.
Untuk melakukannya secara otomatis, atau dengan mode khusus, saya pikir
hook_update_N()
mungkin masih merupakan opsi yang paling layak.Misalnya, ini adalah contoh dari Head 2 Head untuk memperbarui
system.site
untuk mengaturdefault_langcode
:Anda juga dapat membaca dalam konfigurasi (disarankan hanya untuk menambah konfigurasi baru, tidak perlu memperbarui atau mengganti konfigurasi yang mungkin telah disesuaikan):
di mana
$path
path absolut kemy_config.foo.yml
file.sumber
Ketika saya mendarat di pertanyaan ini juga tetapi tidak benar-benar menemukan jawaban yang tepat untuk situasi saya di sini, saya ingin menambahkan jawaban lain.
Harap dicatat: Anti-pola di depan!
Gunakan kasing
Ketika kami sedang mengembangkan proyek, kami terus-menerus memperbarui lingkungan pengujian / penerimaan kami dengan pembaruan konfigurasi baru. Ambil contoh modul Berita fiksi sederhana, kami ingin menambahkan tipe konten ke modul dan menyebarkannya ke lingkungan penerimaan kami. Setelah ditinjau, kami menyimpulkan ada beberapa bidang yang hilang dan hal-hal terkait konfigurasi lainnya. Karena kita tahu lingkungan penerimaan tidak diperbarui dalam konfigurasi, kami benar-benar hanya ingin memuat ulang seluruh konfigurasi dari modul sambil menambahkan fungsi baru dan tidak terganggu dengan mengimpor setiap
.yml
file yang diubah .Kami hanya membutuhkan modul config kami ketika kami sedang mengembangkan multisite. Untuk situs tunggal, sebagian besar kami hanya menggunakan konfigurasi situs yang diekspor di mana langkah selanjutnya tidak perlu.
Masukkan kembali konfigurasi sepenuhnya (anti-pola!)
Kami menemukan bahwa menggunakan layanan ConfigInstaller , kami dapat mengimpor kembali konfigurasi lengkap lagi dari modul tertentu.
Gunakan dengan hati-hati!
Saya ingin menambahkan bahwa ini akan menimpa konten aktif apa pun yang telah diubah dalam lingkungan. Jadi, hanya gunakan solusi ini ketika Anda yakin aman untuk menimpa konfigurasi aktif. Kami tidak akan pernah menggunakannya pada lingkungan produksi dan hanya akan diterapkan pada pengembangan awal.
Pertama coba solusi @ jhedstrom sebelum Anda mulai mempertimbangkan yang ini.
sumber
Saya telah menemukan inti ini di GitHub, yang mengembalikan / memuat ulang konfigurasi modul menggunakan drush:
sumber
Berdasarkan komentar saya: Bagaimana cara saya memperbarui konfigurasi modul?
Saya telah membuat fungsi kecil yang membantu saya, di sini contoh kode saya:
sumber
Jawaban di atas (re-import penuh) bekerja untuk use case saya juga, tetapi pertama-tama saya menghabiskan sedikit waktu untuk melihat re-import yang lebih selektif. Inilah kode yang saya miliki yang sepertinya berfungsi sebagai kait pembaruan dan didasarkan pada kode di modul config_update:
sumber
Modul Konfigurasi Synchronizer membantu menyelesaikan masalah ini dengan cara yang baik. Modul 7 modul ini tampaknya sedikit berlebihan hanya untuk kasus ini (maksudnya adalah untuk secara aman menggabungkan pembaruan tanpa menimpa kustomisasi), tetapi karena konsepnya itu juga memungkinkan untuk melacak dan mengimpor perubahan konfigurasi dari modul / instal dan / folder opsional dengan cepat.
Pada dasarnya, Anda dapat mengujinya seperti berikut:
Catatan: jika Anda hanya ingin menggunakan config_sync untuk mempercepat impor konfigurasi selama pengembangan modul (dan Anda tidak peduli tentang penggabungan dengan pembaruan klien), itu cukup untuk memiliki suite ini diinstal dan diaktifkan pada lingkungan (pengembangan) lokal Anda saja ( dengan asumsi modul Anda akan pergi ke lingkungan yang lebih tinggi setelah menyelesaikan dan Anda menggunakan manajemen konfigurasi inti D8 untuk memposting konfigurasinya ke lingkungan yang lebih tinggi).
sumber