Rumah > pembangunan bahagian belakang > tutorial php > Modul Drupal 8 - Pengurusan Konfigurasi dan Bekas Perkhidmatan

Modul Drupal 8 - Pengurusan Konfigurasi dan Bekas Perkhidmatan

Christopher Nolan
Lepaskan: 2025-02-21 10:17:09
asal
999 orang telah melayarinya

Drupal 8 Modules - Configuration Management and the Service Container

mata teras

Kelas
    Drupal 8
  • menyediakan fungsi tambahan untuk berinteraksi dengan sistem konfigurasi, yang membolehkan alat untuk menukar borang ke nilai yang disimpan. Ini boleh dilakukan dengan menggantikan kelas lanjutan dengan ConfigFormBase dan membuat perubahan yang diperlukan dalam bentuk. Konfigurasi dalam Drupal 8 disimpan dalam fail YAML dan boleh diubah melalui UI untuk digunakan di laman web yang berbeza. ConfigFormBase
  • Bekas perkhidmatan di Drupal 8 membolehkan penciptaan perkhidmatan, iaitu kelas PHP yang melakukan operasi global, dan mendaftarkannya ke dalam bekas perkhidmatan untuk akses. Suntikan ketergantungan digunakan untuk lulus objek ke objek lain, memastikan decoupling. Anda boleh mendaftarkan perkhidmatan dengan membuat fail
  • dalam direktori root modul. demo.services.yml
  • Suntikan ketergantungan di Drupal 8 adalah corak reka bentuk yang membolehkan satu objek memberikan kebergantungan untuk yang lain, menjadikan kod lebih modular dan lebih mudah untuk diuji. Ini boleh dicapai dengan memperluaskan kelas
  • atau melaksanakan ControllerBase. Anda juga boleh menggunakan kelas ContainerInjectionInterface untuk mengakses perkhidmatan di seluruh dunia. Drupal

Perhatikan bahawa sesetengah bahagian kod mungkin ketinggalan zaman kerana Drupal 8 sedang dalam pembangunan pada masa penulisan. Sila lihat repositori ini, saya cuba mengemas kini kod sampel dan menjadikannya serasi dengan versi Drupal 8 terkini.

Dalam artikel sebelumnya mengenai pembangunan modul Drupal 8, kami melihat membuat jenis dan bentuk blok. Kami telah melihat bahawa blok kini boleh diguna semula, dan segala yang diperlukan untuk menentukan jenis blok dilakukan dalam satu kelas. Begitu juga, fungsi penjanaan bentuk juga dikelompokkan dalam kelas di mana tugas -tugas yang dilakukan oleh kaedah tertentu adalah serupa dengan yang kita gunakan di Drupal 7.

Dalam tutorial ini, saya akan meneruskan dari mana kita berakhir kali terakhir. Saya akan menerangkan cara menukar

kami ke dalam bentuk yang digunakan untuk menyimpan nilai melalui sistem konfigurasi Drupal 8. Selepas itu, kami akan menggambarkan bekas perkhidmatan dan suntikan ketergantungan dengan contoh. DemoForm

Jangan lupa, jika anda ingin mendapatkan semua kod yang ditulis dalam siri tutorial ini, anda boleh menyemak repositori ini.

Borang konfigurasi

Apabila kita mula -mula ditakrifkan

, kita memperluaskan kelas DemoForm, yang merupakan pelaksanaan yang paling mudah FormBase. Walau bagaimanapun, Drupal 8 juga dilengkapi dengan FormInterface, yang menyediakan beberapa ciri tambahan yang membuat berinteraksi dengan sistem konfigurasi sangat mudah. ConfigFormBase

Apa yang perlu kita lakukan sekarang ialah menukar

ke dalam bentuk yang menyimpan alamat e -mel yang dimasukkan oleh pengguna. Perkara pertama yang perlu kita lakukan ialah menggantikan kelas lanjutan dengan DemoForm (dan tentu saja ConfigFormBase itu): use

use Drupal\Core\Form\ConfigFormBase;

class DemoForm extends ConfigFormBase {
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Sebelum kita terus mengubah borang yang lain, mari kita lihat bagaimana konfigurasi mudah dalam kerja Drupal 8. Saya berkata "mudah" kerana terdapat entiti konfigurasi yang lebih kompleks, yang tidak akan kami perkenalkan hari ini. Buat masa ini, konfigurasi yang disediakan oleh modul (teras atau sumbangan) disimpan dalam fail YAML. Apabila modul diaktifkan, data ini diimport ke dalam pangkalan data (untuk meningkatkan prestasi apabila digunakan). Dengan UI, kita boleh mengubah konfigurasi ini dan kemudian dengan mudah mengeksportnya ke fail YAML untuk digunakan di laman web yang berbeza.

Modul

boleh memberikan konfigurasi lalai dalam fail YAML dalam folder config/install dalam direktori akar modul. Konvensyen penamaan untuk fail ini adalah untuk awalan nama modul. Oleh itu, mari buat fail yang dipanggil demo.settings.yml. Dalam fail ini, mari tampal yang berikut:

demo:
  email_address: demo@demo.com
Salin selepas log masuk
Salin selepas log masuk

Ini adalah struktur bersarang (seperti array bersekutu dalam PHP). Di bawah kekunci demo, kami mempunyai pasangan nilai kunci yang lain. Biasanya, untuk mengakses nilai bersarang ini, kami menggunakan titik (.). Dalam kes kami, ia adalah demo.email_address.

Sebaik sahaja kami mempunyai fail ini, satu perkara penting yang perlu anda ingat ialah fail ini akan diimport hanya apabila modul dipasang. Jadi, teruskan memasang semula. Sekarang kita boleh kembali ke bentuk kita dan melihat satu demi satu kaedah yang perlu diselaraskan.

inilah kaedah buildForm() sekarang kelihatan seperti:

public function buildForm(array $form, array &$form_state) {

  $form = parent::buildForm($form, $form_state);

  $config = $this->config('demo.settings');

  $form['email'] = array(
    '#type' => 'email',
    '#title' => $this->t('Your .com email address.'),
    '#default_value' => $config->get('demo.email_address')
  );

  return $form;
}
Salin selepas log masuk
Salin selepas log masuk

Pertama, bertentangan dengan FormBase, kelas ConfigFormBase juga melaksanakan kaedah ini untuk menambah elemen ke array bentuk (butang hantar). Jadi, sebelum menambah unsur -unsur kita sendiri, kita boleh menggunakan apa yang kita lakukan sebelum kelas induk.

Sekarang untuk bahagian konfigurasi. Drupal 8 menyediakan objek Config yang boleh kita gunakan untuk berinteraksi dengan konfigurasi. Sesetengah kelas telah memperolehnya melalui suntikan pergantungan. ConfigFormBase Ini adalah kelas seperti itu.

seperti yang anda lihat, kami menggunakan kaedah config() kelas induk untuk mengambil objek Config yang telah dihuni dengan konfigurasi mudah demo.settings kami. Kemudian, untuk #default_value elemen borang e -mel, kami menggunakan kaedah Config objek get() untuk mendapatkan nilai alamat e -mel.

Seterusnya kita hanya perlu menukar pengendali komit, kerana kaedah validateForm() kini boleh tetap sama:

public function submitForm(array &$form, array &$form_state) {

  $config = $this->config('demo.settings');
  $config->set('demo.email_address', $form_state['values']['email']);
  $config->save();

  return parent::submitForm($form, $form_state);
}
Salin selepas log masuk

Dalam kaedah ini, kita mula -mula mengambil objek Config yang kita konfigurasi (seperti yang kita lakukan sebelum ini). Kami kemudian menggunakan kaedah set() untuk menukar nilai email_address ke nilai yang dikemukakan pengguna. Kemudian kami menggunakan kaedah save() untuk menyimpan konfigurasi. Akhirnya, kami melanjutkan pengendali komitmen induk kerana ia termasuk beberapa fungsi (dalam kes ini ia menetapkan mesej Drupal ke skrin).

itu sahaja. Anda boleh membersihkan cache dan mencubanya. Dengan menghantar alamat e -mel baru, anda menyimpannya dalam konfigurasi. Fail demo.settings.yml pastinya tidak akan berubah, tetapi anda boleh mengeksport konfigurasi demo.settings dan mengimportnya ke laman web lain.

Container Service dan Suntikan Ketergantungan

Perkara seterusnya yang ingin kita lihat ialah bekas perkhidmatan. Falsafah di sebalik perkhidmatan ini adalah untuk memecah fungsi ke dalam komponen yang boleh diguna semula. Oleh itu, perkhidmatan adalah kelas PHP yang melakukan beberapa operasi global dan mendaftar kepada bekas perkhidmatan untuk akses.

Suntikan ketergantungan adalah cara kita lulus objek untuk memastikan decoupling. Setiap perkhidmatan perlu mengendalikan satu perkara, dan jika memerlukan perkhidmatan lain, yang terakhir boleh disuntik ke dalam bekas. Tetapi kita akan melihat bagaimana untuk melakukannya dengan segera.

Seterusnya, kami akan membuat perkhidmatan yang sangat mudah dan mendaftarkannya ke dalam bekas. Ia hanya mempunyai satu cara sebenar untuk mengembalikan nilai mudah. Kami kemudian menyuntik perkhidmatan sebagai kebergantungan ke dalam DemoController dan menggunakan nilai yang disediakan oleh Perkhidmatan.

Untuk mendaftarkan perkhidmatan, kita perlu membuat fail demo.services.yml yang terletak di direktori root modul, dengan kandungan berikut:

use Drupal\Core\Form\ConfigFormBase;

class DemoForm extends ConfigFormBase {
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Konvensyen penamaan fail adalah module_name.services.yml.

Baris pertama mewujudkan pelbagai perkhidmatan. Baris kedua mentakrifkan perkhidmatan pertama (dipanggil demo_service, yang diawali oleh nama modul). Baris ketiga menentukan kelas yang akan diterapkan untuk perkhidmatan ini. Seterusnya adalah untuk membuat fail kelas src/ dalam folder DemoService.php modul kami. Inilah perkhidmatan saya (sebenarnya tidak ada, hanya untuk menggambarkan cara menggunakannya):

demo:
  email_address: demo@demo.com
Salin selepas log masuk
Salin selepas log masuk

Tidak ada yang perlu dijelaskan di sini, kerana ia sangat asas. Seterusnya, mari kita beralih ke DemoController kami dan gunakan perkhidmatan ini. Kita boleh melakukan ini dalam dua cara: mengakses bekas di seluruh dunia melalui kelas Drupal atau lulus objek kelas ini kepada pengawal kami menggunakan suntikan ketergantungan. Amalan terbaik mencadangkan kita harus mengambil pendekatan kedua, jadi itulah yang akan kita lakukan. Tetapi kadang -kadang anda memerlukan akses global ke perkhidmatan ini. Untuk melakukan ini, anda boleh melakukan perkara berikut:

public function buildForm(array $form, array &$form_state) {

  $form = parent::buildForm($form, $form_state);

  $config = $this->config('demo.settings');

  $form['email'] = array(
    '#type' => 'email',
    '#title' => $this->t('Your .com email address.'),
    '#default_value' => $config->get('demo.email_address')
  );

  return $form;
}
Salin selepas log masuk
Salin selepas log masuk

sekarang $service adalah objek kelas DemoService yang baru saja kita buat. Tetapi mari kita lihat bagaimana untuk menyuntik perkhidmatan kami sebagai kebergantungan dalam kelas DemoController. Saya akan menerangkan apa yang perlu dilakukan terlebih dahulu, dan kemudian anda akan melihat pengawal lengkap dengan semua perubahan yang dibuat kepadanya.

Pertama, kita perlu mengakses bekas perkhidmatan. Ini sangat mudah untuk pengawal. Kita boleh melanjutkan kelas ControllerBase, yang memberikan kita ini sebagai tambahan kepada beberapa program penolong lain. Sebagai alternatif, pengawal kami boleh melaksanakan ContainerInjectionInterface, yang juga membolehkan kami mengakses bekas. Tetapi kita akan berpegang pada ControllerBase, jadi kita perlukan use kelas.

Seterusnya, kita perlukan use Symfony 2 ContainerInterface sebagai keperluan kaedah create(), yang meniru objek lain pengawal dan melepasi perkhidmatan yang kita mahu.

Akhirnya, kita akan memerlukan pembina untuk mendapatkan objek perkhidmatan yang diluluskan (objek yang dikembalikan create()) dan memberikannya kepada sifat untuk kegunaan kemudian. create() urutan di mana kaedah mengembalikan objek perlu mencerminkan perintah di mana ia diserahkan kepada pembina.

jadi mari kita lihat di Modified kami DemoController:

use Drupal\Core\Form\ConfigFormBase;

class DemoForm extends ConfigFormBase {
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Seperti yang anda lihat, semua langkah ada di sini. Kaedah create() mencipta contoh baru kelas pengawal kami dan meluluskan perkhidmatan yang diambil dari bekas kepadanya. Akhirnya, satu contoh kelas DemoService disimpan dalam harta $demoService, yang boleh kita gunakan untuk memanggil kaedah getDemoValue(). Nilai ini kemudiannya akan digunakan dalam mesej "Hello". Kosongkan cache dan cubalah. Pergi ke jalan demo/ dan anda harus melihat "Hello Upchuk!"

Saya percaya anda dapat melihat kuasa kontena perkhidmatan, kerana kita sekarang boleh menulis fungsi yang dipisahkan dan lulus mereka di mana diperlukan. Saya tidak menunjukkan kepada anda bagaimana untuk melakukannya, tetapi anda boleh mengisytiharkan kebergantungan semasa mendaftar untuk perkhidmatan. Ini bermakna apabila Drupal menafikan objek perkhidmatan, ia akan berbuat demikian untuk semua kebergantungannya, dan menyerahkannya kepada pembina. Anda boleh membaca lebih lanjut mengenai cara melakukan ini di halaman dokumen ini.

Kesimpulan

Dalam artikel ini, kami telah melihat banyak perkara yang sejuk. Kami telah melihat bagaimana sistem konfigurasi menguruskan konfigurasi mudah dan ciri -ciri "bentuk" yang disediakan untuk ini. Saya menggalakkan anda untuk meneroka bagaimana ConfigFormBase dilaksanakan dan ciri -ciri apa yang tersedia semasa memperluaskannya. Di samping itu, anda harus berlatih menggunakan konfigurasi import/eksport antara tapak di UI. Mulai sekarang, ini akan menjadi peningkatan besar kepada proses penempatan.

Kami kemudian melihat perkhidmatan, apa yang mereka ada, dan bagaimana mereka bekerja. Cara terbaik untuk mengekalkan blok fungsi yang boleh diguna semula dan dipadamkan yang boleh diakses dari mana -mana sahaja. Saya harap konsep suntikan ketergantungan tidak lagi menakutkan (jika ia untuk anda). Ia pada dasarnya sama seperti parameter lulus ke fungsi prosedur, tetapi dilakukan di belakang tabir oleh Symfony dan bekas perkhidmatannya yang kuat menggunakan kaedah pembina (atau setter).

Soalan Lazim mengenai Bangunan Drupal 8 Modul: Pengurusan Konfigurasi dan Bekas Perkhidmatan

Apakah peranan bekas perkhidmatan di Drupal 8?

Bekas perkhidmatan di Drupal 8 adalah komponen utama yang menguruskan penciptaan perkhidmatan, objek yang digunakan secara global dalam aplikasi Drupal. Ia memastikan bahawa setiap perkhidmatan hanya instantiated sekali, menjimatkan memori dan meningkatkan prestasi. Bekas perkhidmatan juga mengendalikan suntikan ketergantungan, corak reka bentuk yang membolehkan satu objek memberikan kebergantungan untuk objek lain. Ini menjadikan kod lebih modular, lebih mudah untuk menguji dan menggalakkan organisasi yang lebih baik.

bagaimana untuk menentukan perkhidmatan baru di Drupal 8?

Untuk menentukan perkhidmatan baru di Drupal 8, anda perlu membuat fail services.yml dalam direktori root modul. Fail ini harus mengandungi nama, kelas, dan parameter perkhidmatan. Kelas ini mestilah nama kelas yang berkelayakan yang melaksanakan perkhidmatan tersebut, dan parameter harus menjadi perkhidmatan atau parameter di mana perkhidmatan itu bergantung.

Apakah tujuan pengurusan konfigurasi di Drupal 8?

Pengurusan Konfigurasi di Drupal 8 adalah sistem yang membolehkan anda menguruskan data konfigurasi tapak secara konsisten. Ia membolehkan anda mengimport, mengeksport, dan menyegerakkan data konfigurasi, yang berguna apabila memindahkan perubahan konfigurasi dari persekitaran pembangunan ke tapak pengeluaran. Ia juga menyediakan cara untuk mengesan dan menguruskan perubahan konfigurasi tapak dari masa ke masa.

Bagaimana untuk mengeksport dan mengimport data konfigurasi menggunakan sistem pengurusan konfigurasi?

Untuk mengeksport data konfigurasi di Drupal 8, anda boleh menggunakan antara muka Pengurusan Konfigurasi di panel admin atau menggunakan arahan Drush. Data yang dieksport akan berada dalam format YAML dan boleh dibaca dan diedit dengan mudah. Untuk mengimport data konfigurasi, anda boleh memuat naik fail YAML yang dieksport melalui antara muka pengurusan konfigurasi atau menggunakan arahan Drush. Ingatlah untuk menyandarkan laman web anda sebelum mengimport data konfigurasi untuk mengelakkan sebarang kehilangan data yang berpotensi.

Apakah suntikan ketergantungan dan mengapa penting dalam Drupal 8?

Suntikan ketergantungan adalah corak reka bentuk yang membolehkan satu objek memberikan kebergantungan untuk objek lain. Di Drupal 8, ia digunakan untuk membuat perkhidmatan dan pengawal lebih modular dan lebih mudah untuk diuji. Daripada membuat kebergantungan di dalam objek, mereka diluluskan (disuntik) melalui kaedah pembina atau setter. Ini menjadikan kod lebih mudah untuk diuji, lebih fleksibel dan kurang digabungkan.

Bagaimana untuk menyuntik kebergantungan ke dalam perkhidmatan Drupal 8 saya?

Untuk menyuntik kebergantungan ke dalam perkhidmatan di Drupal 8, anda perlu menentukannya dalam definisi perkhidmatan dalam fail services.yml. Ketergantungan harus disenaraikan di bawah kekunci arguments. Apabila perkhidmatan dibuat, bekas perkhidmatan secara automatik akan meluluskan kebergantungan ini kepada pembina perkhidmatan.

Apakah perbezaan antara perkhidmatan dan pemalam di Drupal 8?

Di Drupal 8, perkhidmatan adalah objek yang melakukan tugas global dalam aplikasi, sementara plug-in adalah objek yang melakukan tugas-tugas tertentu dengan cara pluggable. Perkhidmatan ditakrifkan dalam fail services.yml dan diuruskan oleh bekas perkhidmatan, manakala pemalam ditemui dan instantiated oleh pengurus plug-in.

Bagaimana untuk mengatasi perkhidmatan di Drupal 8?

Untuk menimpa perkhidmatan di Drupal 8, anda perlu menentukan perkhidmatan dengan nama yang sama dengan perkhidmatan yang anda ingin ganti dalam fail services.yml modul. Perkhidmatan baru anda harus melanjutkan kelas perkhidmatan asal dan mengatasi kaedah yang ingin anda ubah.

Bagaimana menggunakan sistem pengurusan konfigurasi untuk menjejaki perubahan dalam konfigurasi tapak?

Sistem Pengurusan Konfigurasi di Drupal 8 menyediakan cara untuk mengesan perubahan konfigurasi tapak melalui sistem snapshot konfigurasi. Sistem ini mengambil gambar konfigurasi aktif tapak setiap kali anda mengimport atau menyegerakkan data konfigurasi. Anda kemudian boleh membandingkan gambar ini untuk melihat perubahan yang telah dibuat.

services.yml Apa yang dilakukan oleh fail dalam Drupal 8?

fail services.yml di Drupal 8 adalah tempat di mana perkhidmatan modul ditakrifkan. Setiap perkhidmatan ditakrifkan menggunakan nama yang unik, nama kelas yang berkelayakan sepenuhnya yang melaksanakan perkhidmatan, dan sebarang perkhidmatan atau parameter perkhidmatan bergantung kepada. services.yml Fail dibaca oleh bekas perkhidmatan, dan bekas perkhidmatan menguruskan penciptaan dan suntikan perkhidmatan.

Atas ialah kandungan terperinci Modul Drupal 8 - Pengurusan Konfigurasi dan Bekas Perkhidmatan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan