cari
Rumahpembangunan bahagian belakangtutorial phpBina Modul Drupal 8: Pautan Routing, Controllers dan Menu

Build a Drupal 8 Module: Routing, Controllers and Menu Links

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 folder modules/ 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 core/, disyorkan untuk memisahkan modul ke dalam modules/ custom dan sumbangan seperti dalam Drupal 7.

mari kita buat modul yang dipanggil demo (sangat asli) dan masukkannya ke dalam direktori

. 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 harus akrab dengan tiga daripada empat pasangan nilai utama (nama, keterangan, dan teras). Jenis juga merupakan keperluan sekarang, kerana anda juga boleh membuat fail YML untuk tema tersebut. Satu lagi perkara penting yang perlu diperhatikan ialah ruang dalam fail YML masuk akal dan menggunakan lekukan yang betul untuk menyusun data ke dalam struktur seperti array.

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

Ia seperti ini, fail. Anda kini boleh menavigasi ke halaman sambungan, cari modul demo dan aktifkannya.

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

Apakah "penghalaan", dan apa yang berlaku dengan fungsi panggil baliknya?

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

kerana kita menggunakan komponen Symfony2 yang berat untuk mengendalikan penghalaan. Ini melibatkan menentukan laluan sebagai konfigurasi dan memproses fungsi panggil balik dalam pengawal (fungsi kelas pengawal). Mari kita lihat bagaimana untuk melakukan ini dengan membuat halaman mudah yang mengeluarkan Hello World klasik!

hook_menu() Pertama, kita perlu membuat fail penghalaan bernama

untuk modul kami. Fail ini terletak di folder akar modul (bersebelahan dengan

). 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

dalam direktori akar modul. Dalam fail YML ini, kami akan menentukan pautan menu dan lokasinya di menu tapak yang ada. Untuk mencapai matlamat yang kami tetapkan, kami memerlukan yang berikut:

demo.menu_links.yml

kita sekali lagi mempunyai struktur YML berasaskan indent di mana kita mula-mula menentukan nama mesin (demo) pautan menu untuk demo modul (seperti yang kita lakukan dengan penghalaan). Seterusnya kami mempunyai tajuk dan keterangan pautan, diikuti oleh ibu bapa pautan ini (di mana ia perlu diletakkan) dan laluan apa yang harus digunakan.
<?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!'),
    );
  }
}
Nilai ibu bapa

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

Bagaimanakah sistem penghalaan di Drupal 8 berfungsi?

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

Bagaimana untuk membuat halaman tersuai di Drupal 8?

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!

Kenyataan
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
Data apa yang boleh disimpan dalam sesi PHP?Data apa yang boleh disimpan dalam sesi PHP?May 02, 2025 am 12:17 AM

Phpsessionscanstorestrings, nombor, tatasusunan, andobjects.1.strings: textdatalikeusernames.2.numbers: integersorfloatsforcounters.3.Arrays: ListsLikeshoppingCarts.4.Objects: complextructureSturesthatareserialized.

Bagaimana anda memulakan sesi PHP?Bagaimana anda memulakan sesi PHP?May 02, 2025 am 12:16 AM

Tostartaphpsession, usesession_start () atthescript'sbeginning.1) placeitbeforeanyoutputtosetthesessioncookie.2) usesessionsforusererdatalikeloginstatusorshoppingcarts.3)

Apakah regenerasi sesi, dan bagaimanakah ia meningkatkan keselamatan?Apakah regenerasi sesi, dan bagaimanakah ia meningkatkan keselamatan?May 02, 2025 am 12:15 AM

Penjanaan semula sesi merujuk kepada menjana ID sesi baru dan membatalkan ID lama apabila pengguna melakukan operasi sensitif dalam kes serangan tetap sesi. Langkah-langkah pelaksanaan termasuk: 1. Mengesan Operasi Sensitif, 2. Menjana ID Sesi Baru, 3. Memusnahkan ID Sesi Lama, 4. Kemas kini maklumat sesi pengguna.

Apakah beberapa pertimbangan prestasi semasa menggunakan sesi PHP?Apakah beberapa pertimbangan prestasi semasa menggunakan sesi PHP?May 02, 2025 am 12:11 AM

Sesi PHP mempunyai kesan yang signifikan terhadap prestasi aplikasi. Kaedah pengoptimuman termasuk: 1. Gunakan pangkalan data untuk menyimpan data sesi untuk meningkatkan kelajuan tindak balas; 2. Mengurangkan penggunaan data sesi dan hanya menyimpan maklumat yang diperlukan; 3. Gunakan pemproses sesi yang tidak menyekat untuk meningkatkan keupayaan konkurensi; 4. Laraskan masa tamat tempoh sesi untuk mengimbangi pengalaman pengguna dan beban pelayan; 5. Gunakan sesi berterusan untuk mengurangkan bilangan data membaca dan menulis masa.

Bagaimana sesi PHP berbeza dari kuki?Bagaimana sesi PHP berbeza dari kuki?May 02, 2025 am 12:03 AM

Phpsessionsareserver-side, whilecookiesareclient-side.1) Sessionsstoredataontheserver, aremoresecure, andhandlelargerdata.2) cookiesstoredataontheclient, arelesssecure, andlimiteShorsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsions

Bagaimanakah PHP mengenal pasti sesi pengguna?Bagaimanakah PHP mengenal pasti sesi pengguna?May 01, 2025 am 12:23 AM

Phpidentifierauser'sSessionusingSessionCookiesandSessionIds.1) whensession_start () ISCALLED, phpGeneratesAuniquesessionIdstoredinacookienamedPhpsessidontheUserer'sBrowser.2) ThisIdallowsPhptoretRievesSessionDataFromtheserver.

Apakah beberapa amalan terbaik untuk mendapatkan sesi PHP?Apakah beberapa amalan terbaik untuk mendapatkan sesi PHP?May 01, 2025 am 12:22 AM

Keselamatan sesi PHP boleh dicapai melalui langkah -langkah berikut: 1. Gunakan session_regenerate_id () untuk menjana semula ID sesi apabila pengguna log masuk atau merupakan operasi penting. 2. Sulitkan ID sesi penghantaran melalui protokol HTTPS. 3. Gunakan session_save_path () untuk menentukan direktori selamat untuk menyimpan data sesi dan menetapkan kebenaran dengan betul.

Di manakah fail sesi php disimpan secara lalai?Di manakah fail sesi php disimpan secara lalai?May 01, 2025 am 12:15 AM

PhpsessionFileSarestoredIntHedirectorySpecifiedBySession.save_path, biasanya/tmponunix-likesystemsorc: \ windows \ temponwindows.tocustomethis: 1) usession_save_path ()

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini