mata teras
KelasConfigFormBase
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
demo.services.yml
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
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
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 {
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
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; }
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); }
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 {
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
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; }
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 {
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
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.
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.
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.
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.
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.
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.
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.
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.
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!