


Bina Modul Drupal 8: Pautan Routing, Controllers dan Menu
mata teras
- Drupal 8 bergerak dari pengaturcaraan prosedur ke seni bina berorientasikan objek dan mengintegrasikan kod dari sumber lain melalui program yang ditemui di tempat lain, termasuk penambahan penting seperti komponen simfoni.
- Membuat modul Drupal 8 memerlukan menentukan struktur dan fail folder yang diperlukan, seperti
- fail. Folder modul adat dan sumbangan kini terus di bawah direktori root
.info.yml
, dan kod teras dipindahkan ke foldermodules/
yang berasingan.core/
"Routing" dalam Drupal 8 menggantikan fungsi - di Drupal 7, memanfaatkan komponen Symfony2. Ini melibatkan menentukan laluan sebagai konfigurasi dan mengendalikan fungsi panggil balik dalam pengawal. Fail penghalaan modul
hook_menu()
dibuat dalam folder akar modul.demo.routing.yml
Pautan menu tidak lagi diproses melalui - , tetapi diisytiharkan sebagai konfigurasi dalam fail YML. Buat fail bernama
hook_menu()
dalam direktori akar modul untuk menentukan pautan menu dan lokasinya di menu sedia ada.demo.menu_links.yml
Perhatikan bahawa sejak Drupal 8 masih dalam pembangunan pada masa penulisan, beberapa kod mungkin sudah lapuk. Sila rujuk asas kod saya cuba mengemas kini kod sampel dan menjadikannya serasi dengan versi Drupal 8 terkini.
Drupal 8 memperkenalkan banyak perubahan, berusaha menyelaraskannya dengan kerangka PHP moden yang lain. Ini bermakna bahawa pengaturcaraan prosedur gaya Php 4 lama sebahagian besarnya digantikan oleh seni bina berorientasikan objek. Untuk mencapai matlamat ini, di bawah program di tempat lain yang ditemui dengan bangga, Drupal 8 mengandungi kod yang tidak dibangunkan secara khusus untuk Drupal.Salah satu penambahan yang paling penting kepada Drupal ialah komponen Symfony, yang mempunyai dua kesan utama terhadap pemaju Drupal. Pertama, ia berpotensi untuk meningkatkan jumlah pemaju yang ingin dibangunkan untuk Drupal sekarang. Kedua, ia telah meninggalkan beberapa kebimbangan kepada beberapa pemaju Drupal 7 yang tidak mempunyai pengalaman amalan PHP moden. Tetapi tidak mengapa, kita semua belajar, pengalaman yang kita pelajari dari kerangka seperti Symfony (dan diharapkan Drupal 8) akan dilanjutkan dengan mudah dan digunakan untuk kerangka PHP yang lain.
Sementara itu, Drupal 8 berada di peringkat akhir kitaran pelepasannya, dengan versi semasa pada masa penulisan Alpha11. Kami akan menggunakan versi ini untuk mempamerkan beberapa perubahan asas dalam pembangunan modul yang Drupal 7 pemaju akan pertama kali bertemu dan harus biasa. Saya menyediakan asas kod git di mana anda boleh mencari kod yang saya tulis dalam siri ini, dan jika anda lebih suka, anda boleh mengikuti dan belajar seperti ini.
bagaimana membuat modul?
Perkara pertama yang perlu kami fokuskan ialah menentukan struktur dan fail folder yang diperlukan supaya Drupal 8 dapat memahami modul baru kami. Di Drupal 7, kita perlu membuat sekurang -kurangnya dua fail (.info
dan .module
), tetapi di Drupal 8, versi YAML dari bekas sudah cukup. Ya, fail .info
kini digantikan oleh fail .info.yml
, yang mengandungi data yang sama, tetapi dengan struktur yang berbeza.
Satu lagi perubahan besar ialah folder modul adat dan sumbangan kini pergi terus ke folder Direktori Root modules/
. Ini kerana semua kod teras telah dipindahkan ke folder modules/
custom dan sumbangan seperti dalam Drupal 7.
. Seperti yang saya nyatakan, dalam folder modules/custom/
yang baru diwujudkan ini, kita hanya memerlukan fail demo/
yang mengandungi kandungan yang diperlukan berikut: demo.info.yml
name: Drupal 8 Demo module description: 'Demo module for Drupal 8 alpha11' type: module core: 8.x
Anda boleh melihat halaman dokumen ini untuk pasangan nilai kunci tambahan yang boleh ditambah ke fail modul
, dan arahan untuk mengumumkan perubahan pada format ini. .info.yml
Seperti yang saya nyatakan, sebelum kita mengaktifkan modul, kita tidak lagi perlu membuat fail
. Secara seni bina, saiz fail .module
akan dikurangkan, kerana kebanyakan logik perniagaan akan dipindahkan ke kelas perkhidmatan, pengawal, dan plugin, tetapi kami akan melihat sebahagian daripada mereka kemudian. .module
hook_menu()
di Drupal 7,
mungkin cangkuk yang paling dilaksanakan kerana ia digunakan untuk menentukan laluan Drupal dan menghubungkan laluan ini ke fungsi panggilan balik. Ia juga bertanggungjawab untuk membuat pautan menu dan banyak kandungan lain.
hook_menu()
Dalam Drupal 8, kita tidak lagi memerlukan
hook_menu()
Pertama, kita perlu membuat fail penghalaan bernama
). Dalam fail ini, kita boleh mempunyai definisi laluan berikut (mudah): demo.routing.yml
name: Drupal 8 Demo module description: 'Demo module for Drupal 8 alpha11' type: module core: 8.x
baris pertama menandakan permulaan membuat laluan baru yang dipanggil demo untuk demo modul (yang pertama adalah nama modul dan yang kedua adalah nama laluan). Di bawah jalan, kami menentukan jalan untuk mendaftar untuk laluan ini. Di bawah lalai, kami mempunyai dua perkara: Tajuk Halaman Lalai (_title
) dan _content
, yang merujuk fungsi pada kelas Democontroller. Di bawah keperluan, kami menentukan keizinan yang diperlukan oleh pengguna untuk melihat halaman tersebut. Anda harus berunding dengan halaman dokumentasi ini untuk lebih banyak pilihan fail penghalaan ini.
Sekarang, mari buat pengawal pertama kami yang dipanggil Democontroller, yang akan memanggil fungsi yang dipanggil Demo () apabila pengguna meminta halaman ini.
Dalam direktori modul, buat folder bernama src/ dan buat folder bernama pengawal/ di dalamnya. Ini akan menjadi tempat kelas pengawal disimpan. Terus buat yang pertama: Democontroller.php.
pengawal dan kelas lain yang akan kita lihat kemudian ke dalam folder SRC/ adalah sebahagian daripada piawaian PSR-4. Pada mulanya kita terpaksa mewujudkan struktur folder yang lebih besar (piawai PSR-0), tetapi sekarang terdapat fasa peralihan di mana kedua-dua kerja. Jadi jika anda masih melihat kod yang diletakkan dalam folder yang dipanggil lib/, ia adalah PSR-0.
Dalam fail democontroller.php kami, kami kini boleh mengisytiharkan kelas kami:
demo.demo: path: '/demo' defaults: _content: '\Drupal\demo\Controller\DemoController::demo' _title: 'Demo' requirements: _permission: 'access content'
Ini adalah perkara yang paling mudah dan paling sedikit untuk dilakukan untuk memaparkan sesuatu pada halaman. Di bahagian atas, kami menentukan ruang nama kelas, di bawah kami mengisytiharkan kelas.
Dalam kelas democontroller, kami hanya mempunyai fungsi demo (), yang mengembalikan array yang boleh diperoleh sama dengan Drupal 7. Ia bukan masalah besar. Apa yang perlu kita lakukan sekarang ialah jelas cache dan menavigasi ke https://www.php.cn/link/1a4a5f89e71e4bb997335555555550b4 di mana pautan menu?
Dalam Drupal 7, apabila kami melaksanakan
, kami juga boleh menambah laluan berdaftar ke menu untuk memaparkan pautan menu di laman web. Sekali lagi, ini tidak lagi dikendalikan dengan cangkuk ini, tetapi sebaliknya mentakrifkan pautan menu sebagai konfigurasi menggunakan fail YML.
hook_menu()
Mari lihat cara membuat pautan menu yang muncul di bawah menu "Struktur" yang diuruskan. Pertama, kita perlu membuat fail bernama
demo.menu_links.yml
<?php /** * @file * Contains \Drupal\demo\Controller\DemoController. */ namespace Drupal\demo\Controller; /** * DemoController. */ class DemoController { /** * Generates an example page. */ public function demo() { return array( '#markup' => t('Hello World!'), ); } }
adalah pautan menu induk (pasangkan modulnya), dan untuk mencari anda perlu melakukan beberapa penggalian dalam fail *.menu_links.yml. Saya tahu bahawa pautan "Struktur" ditakrifkan dalam modul Sistem Teras, jadi dengan melihat fail System.Menu_Links.yml saya dapat menentukan nama pautan ini.
route_name adalah nama mesin laluan yang ingin kami gunakan untuk pautan ini. Kami mendefinisikan kami sebelum ini. Dengan ini anda boleh membersihkan cache dan menavigasi ke https://www.php.cn/link/6c2665d7c3ed1e5bfd8ba600f026eb55 demo/path. baik.
Kesimpulan
Dalam artikel ini, kita mula meneroka pembangunan modul di Drupal 8. Pada peringkat ini (versi Alpha11), sudah tiba masanya untuk mula belajar bagaimana menggunakan modul sumbangan API dan pelabuhan baru. Untuk melakukan ini, saya menulis penerokaan saya tentang rangka kerja baru yang baru ini (Drupal 8) supaya kita semua dapat mempelajari perubahan ini dan masuk ke dalam kerja dengan segera apabila hari pelepasan tiba.
Pertama, kita belajar beberapa asas: bagaimana untuk memulakan modul Drupal 8 (fail, struktur folder, dll.) Dan bandingkan dengan Drupal 7. Kami juga belajar bagaimana untuk menentukan laluan dan kelas pengawal, dan bagaimana untuk memanggil fungsi melalui laluan ini. Akhirnya, kita melihat bagaimana untuk membuat pautan menu yang menggunakan laluan yang kami tentukan.Dalam tutorial seterusnya, kami akan terus membina modul ini dan mempelajari beberapa ciri baru yang menarik yang digunakan oleh Drupal 8. Kami akan belajar bagaimana untuk membuat blok dan cara menggunakan borang dan mengkonfigurasi sistem. Jumpa lagi.
Soalan Lazim Mengenai Bangunan Drupal 8 Modul (FAQ)
Apakah struktur asas modul Drupal 8?
Modul Drupal 8 pada dasarnya adalah satu set fail yang mengandungi fungsi tertentu dan dibina dengan cara tertentu. Struktur asas termasuk fail
(menyediakan metadata mengenai modul), fail .info.yml
(termasuk kod PHP), dan fail pilihan lain seperti .module
, .css
, .js
, dan sebagainya, untuk fungsi melampirkan. .twig
Fail adalah wajib, yang menentukan nama, keterangan, pakej, jenis, teras, dan kebergantungan modul. .info.yml
Sistem penghalaan di Drupal 8 bertanggungjawab untuk memetakan URL ke kelas pengawal tertentu. Ia menggunakan komponen penghalaan Symfony, yang membolehkan sistem yang fleksibel dan berkuasa. Sistem penghalaan menggunakan fail
untuk menentukan laluan dengan nama, laluan, nilai lalai, dan keperluan yang unik. Nilai lalai biasanya menentukan kelas pengawal yang bertanggungjawab untuk mengendalikan permintaan. routing.yml
Mewujudkan halaman tersuai di Drupal 8 melibatkan penentuan laluan dan pengawal. Laluan ini ditakrifkan dalam fail
dan memetakan URL ke pengawal. Pengawal adalah kelas PHP yang mengembalikan array yang diberikan untuk kandungan halaman. Kelas pengawal harus diletakkan dalam direktori routing.yml
modul. src/Controller
Bagaimana untuk menambah pautan menu ke halaman tersuai Drupal 8 saya?
Menambah pautan menu ke halaman tersuai anda melibatkan membuat fail links.menu.yml
dalam modul anda. Fail ini mentakrifkan pautan menu yang sifatnya termasuk tajuk, keterangan, ibu bapa, nama laluan, dan berat badan. Nama laluan sepadan dengan nama laluan yang ditakrifkan dalam fail routing.yml
.
Bagaimana untuk membuat borang di Drupal 8?
Mewujudkan borang dalam Drupal 8 melibatkan mewujudkan kelas bentuk yang memanjangkan kelas FormBase
dan pelaksanaan FormInterface
. Kelas ini mentakrifkan elemen bentuk, pengesahan, dan pemprosesan penyerahan. Borang ini boleh dipaparkan dengan mengembalikannya dari pengawal.
Bagaimana untuk membuat blok di Drupal 8?
Membuat blok di Drupal 8 melibatkan membuat kelas blok yang memanjangkan kelas BlockBase
. Kelas ini mentakrifkan kandungan blok dan sifat lain. Blok boleh diletakkan di halaman melalui antara muka susun atur blok.
Bagaimana untuk membuat borang konfigurasi di Drupal 8?
Mewujudkan borang konfigurasi melibatkan mewujudkan kelas bentuk yang memanjangkan kelas ConfigFormBase
dan pelaksanaan FormInterface
. Kelas ini mentakrifkan elemen bentuk dan mengendalikan penyimpanan dan pemuatan data konfigurasi.
Bagaimana untuk membuat halaman admin di Drupal 8?
Mewujudkan halaman pentadbiran melibatkan menentukan laluan di bawah /admin
dan pengawal yang mengembalikan kandungan halaman. Halaman boleh ditambah ke menu admin dengan menentukan pautan menu dengan ibu bapa di bawah system.admin
.
Bagaimana untuk membuat tema di Drupal 8?
Membuat topik dalam Drupal 8 melibatkan membuat fail .info.yml
yang mentakrifkan nama, keterangan, jenis, teras, dan topik asas. Lain -lain .twig
, .css
dan .js
fail boleh ditambah untuk menetapkan tema untuk setiap elemen.
Bagaimana untuk membuat jenis medan tersuai di Drupal 8?
Membuat jenis medan tersuai melibatkan membuat kelas jenis medan yang memanjangkan kelas FieldTypePluginBase
. Kelas ini mentakrifkan sifat medan dan kaedah untuk menyimpan, memaparkan, dan membentuk pemprosesan. Jenis medan boleh digunakan untuk jenis kandungan, pengguna, komen, dan entiti lain.
Atas ialah kandungan terperinci Bina Modul Drupal 8: Pautan Routing, Controllers dan Menu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Sesi rampasan boleh dicapai melalui langkah -langkah berikut: 1. Dapatkan ID Sesi, 2. Gunakan ID Sesi, 3. Simpan sesi aktif. Kaedah untuk mengelakkan rampasan sesi dalam PHP termasuk: 1. Gunakan fungsi Sesi_Regenerate_ID () untuk menjana semula ID Sesi, 2. Data sesi stor melalui pangkalan data, 3.

Fungsi penghitungan dalam Php8.1 meningkatkan kejelasan dan jenis keselamatan kod dengan menentukan pemalar yang dinamakan. 1) Penghitungan boleh menjadi bilangan bulat, rentetan atau objek, meningkatkan kebolehbacaan kod dan keselamatan jenis. 2) Penghitungan adalah berdasarkan kelas dan menyokong ciri-ciri berorientasikan objek seperti traversal dan refleksi. 3) Penghitungan boleh digunakan untuk perbandingan dan tugasan untuk memastikan keselamatan jenis. 4) Penghitungan menyokong penambahan kaedah untuk melaksanakan logik kompleks. 5) Pemeriksaan jenis dan pengendalian ralat yang ketat boleh mengelakkan kesilapan biasa. 6) Penghitungan mengurangkan nilai sihir dan meningkatkan keupayaan, tetapi memberi perhatian kepada pengoptimuman prestasi.

Penerapan prinsip pepejal dalam pembangunan PHP termasuk: 1. Prinsip Tanggungjawab Tunggal (SRP): Setiap kelas bertanggungjawab untuk hanya satu fungsi. 2. Prinsip Terbuka dan Tutup (OCP): Perubahan dicapai melalui lanjutan dan bukannya pengubahsuaian. 3. Prinsip Penggantian Lisch (LSP): Subkelas boleh menggantikan kelas asas tanpa menjejaskan ketepatan program. 4. Prinsip Pengasingan Antara Muka (ISP): Gunakan antara muka halus untuk mengelakkan kebergantungan dan kaedah yang tidak digunakan. 5. Prinsip Inversi Ketergantungan (DIP): Modul peringkat tinggi dan rendah bergantung kepada abstraksi dan dilaksanakan melalui suntikan ketergantungan.

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Prinsip reka bentuk Restapi termasuk definisi sumber, reka bentuk URI, penggunaan kaedah HTTP, penggunaan kod status, kawalan versi, dan benci. 1. Sumber harus diwakili oleh kata nama dan dikekalkan pada hierarki. 2. Kaedah HTTP harus mematuhi semantik mereka, seperti GET digunakan untuk mendapatkan sumber. 3. Kod status hendaklah digunakan dengan betul, seperti 404 bermakna sumber tidak wujud. 4. Kawalan versi boleh dilaksanakan melalui URI atau header. 5. Boots Operasi Pelanggan Hateoas melalui pautan sebagai tindak balas.

Dalam PHP, pengendalian pengecualian dicapai melalui percubaan, menangkap, akhirnya, dan membuang kata kunci. 1) blok percubaan mengelilingi kod yang boleh membuang pengecualian; 2) Blok tangkapan mengendalikan pengecualian; 3) Akhirnya Blok memastikan bahawa kod itu sentiasa dilaksanakan; 4) Lemparan digunakan untuk membuang pengecualian secara manual. Mekanisme ini membantu meningkatkan keteguhan dan mengekalkan kod anda.

Fungsi utama kelas tanpa nama dalam PHP adalah untuk membuat objek satu kali. 1. Kelas tanpa nama membenarkan kelas tanpa nama ditakrifkan secara langsung dalam kod, yang sesuai untuk keperluan sementara. 2. Mereka boleh mewarisi kelas atau melaksanakan antara muka untuk meningkatkan fleksibiliti. 3. Beri perhatian kepada prestasi dan kebolehbacaan kod apabila menggunakannya, dan elakkan berulang kali menentukan kelas tanpa nama yang sama.
