Rumah > pembangunan bahagian belakang > tutorial php > Dari Permintaan ke Respons: Perjalanan ke Drupal 8 Internal

Dari Permintaan ke Respons: Perjalanan ke Drupal 8 Internal

Jennifer Aniston
Lepaskan: 2025-02-17 11:11:38
asal
940 orang telah melayarinya

kedalaman ke Drupal 8 (dan Symfony2): Proses permintaan-ke-tindak balas

mata teras

  • Drupal 8 menggunakan komponen Httpkernel dan Httpfoundation Symfony2 untuk memproses permintaan dan respons pengguna, merangkumi permintaan dengan cara yang berorientasikan objek, menyampaikannya kepada permohonan, dan mengembalikan respons.
  • Komponen httpkernel adalah teras mana-mana aplikasi berasaskan simfoni yang memulakan proses dalam fail index.php dan menggunakan proses yang didorong oleh peristiwa. Ini menjadikan aplikasi lebih fleksibel dan tugas dapat diwakilkan kepada pendengar untuk peristiwa -peristiwa ini.
  • Jika pengawal tidak mengembalikan objek tindak balas, kernel mencetuskan peristiwa kernel.view, dan pelanggan bertanggungjawab untuk menukar hasil pengawal ke dalam objek tindak balas sebenar. Fleksibiliti ini membolehkan pengawal untuk mengembalikan apa -apa jenis objek selagi ia digabungkan dengan pelanggan Acara View yang menukarkan objek ke respons yang betul.
Dalam artikel pertama mengenai pembangunan modul Drupal 8, kami belajar sedikit tentang aspek penghalaan proses ini. Kami telah melihat bahawa membuat halaman dengan laluan kini hanya menjadi masalah mengisytiharkan laluan yang sepadan dengan pengawal. Seperti yang dapat kita lihat, yang terakhir boleh mengembalikan array yang diberikan yang ditafsirkan sebagai penanda dan dipaparkan di kawasan kandungan utama halaman tersebut. Tetapi adakah anda tahu bahawa di sebalik tabir, Drupal sebenarnya menukarkan array itu ke objek

objek mengikut peraturan HttpkernelInterface Symfony?

From Request to Response: A Journey into Drupal 8 Internals Dalam artikel ini, saya ingin memberi kita lebih mendalam pada struktur dalaman Drupal 8 (dan Symfony2) dan memahami apa yang sebenarnya berlaku (dan apa yang mungkin berlaku) antara saat pengguna membuat permintaan pada masa yang mereka lihat tindak balas mereka kembali). Contoh -contoh yang saya nyatakan di atas hanya satu arah di mana proses ini boleh pergi, dan hari ini kita akan melihat kemungkinan lain. Matlamatnya adalah untuk memahami fleksibiliti sistem, yang seterusnya dapat membantu kami membina aplikasi yang hebat.

Sebelum menyelidiki lebih mendalam, saya sangat mengesyorkan anda menyemak carta ini, yang melakukan tugas yang baik untuk mensintesis apa yang sering dipanggil

rendering pipeline

. Walaupun ia seolah -olah saya mewakili lebih daripada nama yang dicadangkan, kerana sistem rendering hanya sebahagian daripada gambar, walaupun sebahagian besar.

Pengawal depan (index.php)

Symfony2 kini merupakan bahagian penting dari Drupal. Yang terakhir menggunakan banyak komponen simfoni, komponen yang paling penting untuk artikel ini adalah komponen httpkernel dan httpfoundation. Bersama-sama, mereka bertanggungjawab untuk merangkum permintaan pengguna, menyampaikannya ke aplikasi, dan kemudian mengembalikan kandungan yang dikembalikan kepada pengguna dengan cara yang konsisten dan berorientasikan objek.

HttpKernelInterface (anda mungkin pernah mendengarnya dari konteks lain juga) melekatkan semua ini bersama -sama dengan menerima objek

objek dan sentiasa mengembalikan objek objek. Konsep yang sangat mudah tetapi berkuasa.

Proses ini bermula di dalam fail index.php, yang mula -mula menjana objek permintaan dan lulus ke kaedah httpkernel :: handle (). Yang terakhir kemudiannya bertanggungjawab untuk mengembalikan objek tindak balas. Pada tahap yang tinggi, ini berlaku dalam aplikasi Drupal dan aplikasi Symfony (atau sebarang aplikasi lain yang menggunakan komponen Httpkernel).

httpkernel dan peristiwa

Httpkernel adalah teras mana-mana aplikasi berasaskan simfoni. Seperti yang dapat kita lihat, kaedah pemegangnya () mempunyai banyak tanggungjawab dalam menyediakan respons, dan ia melakukan ini dengan proses yang didorong oleh peristiwa. Ini menjadikan aplikasi sangat fleksibel, dan kerja berat sentiasa diwakilkan kepada pendengar peristiwa -peristiwa ini.

Jika anda melihat carta sebelumnya, anda dapat melihat bahawa alur kerja ini diterangkan dalam lajur kedua, yang pada dasarnya mewakili pelekat dari segi Symfony dan Drupal.

Ia bermula dengan acara pertama yang dipanggil kernel.request. Pelanggan acara ini mengendalikan pelbagai tugas. Tetapi di Drupal 8, dua tugas yang sangat penting adalah rundingan format dan penghalaan. Yang pertama menentukan jenis tindak balas yang perlu dikembalikan (html, json, imej, pdf, dll.), Dan yang kedua menentukan kod yang bertanggungjawab untuk memproses respons ini (kunci _controller yang ditakrifkan oleh laluan dalam fail routing.yml ). Walau bagaimanapun, seperti kebanyakan langkah dalam aliran kerja acara ini, jika pendengar mengembalikan objek tindak balas, proses melangkaui langkah -langkah berikutnya (hentikan penyebaran) dan pergi terus ke kernel.response.

Acara kedua ialah Kernel.Controller, yang dipanggil selepas permohonan mengetahui pengawal mana yang bertanggungjawab untuk memproses permintaan. Pada ketika ini, pendengar masih boleh melakukan beberapa operasi utama di atasnya. Segera mengikuti langkah ini, kernel bertanggungjawab untuk menghuraikan parameter yang diluluskan kepada pengawal. Satu operasi sedemikian di Drupal adalah untuk memuatkan objek berdasarkan ID yang terdapat dalam permintaan (seperti nod) dan memberikan objek ini secara langsung kepada pengawal. Pengawal kemudiannya akan dipanggil dengan parameter yang sepadan.

Pengawal bertanggungjawab untuk mengembalikan respons sejenis. Jika ia mengembalikan objek tindak balas, proses melompat ke acara kernel.Response. Pendengar yang terakhir boleh melakukan pengubahsuaian minit terakhir ke objek, seperti mengubah suai tajuk atau kandungan itu sendiri. Dan selepas mendapatkannya dari kaedah pemegang (), pengawal front-end menghantarnya kembali kepada pengguna menggunakan kaedah Send () pada objek tindak balas dan menamatkan proses.

pemahaman yang lebih mendalam mengenai array yang diberikan

Jika pengawal tidak mengembalikan objek tindak balas, kernel mencetuskan peristiwa terakhir: kernel.view. Pelanggannya bertanggungjawab untuk menukar hasil pengawal ke dalam objek tindak balas sebenar. Oleh itu, ini bermakna anda boleh mengembalikan sebarang jenis objek dari pengawal, selagi anda menggabungkannya dengan pelanggan Acara View yang menukarkan objek itu kepada tindak balas yang betul.

Walau bagaimanapun, seperti yang kita lihat dalam contoh, pengawal mengembalikan array yang diberikan kebanyakan masa. Ini biasanya mewakili kandungan utama halaman (sama dengan panggilan balik halaman di Drupal 7).

Untuk mengendalikan ini, Drupal 8 mempunyai MainContentViewSubscriber yang bertanggungjawab untuk menukar array ini ke objek tindak balas yang betul. Ia melakukan ini dengan menggunakan MainContentRenderer tertentu yang dipilih dalam fasa rundingan format yang dibincangkan sebelumnya. Walaupun sesetengah penghadaman ini sudah tersedia, penghantar lalai yang digunakan adalah htmlrenderer.

Oleh kerana ini adalah jenis penghuni kandungan utama yang paling biasa digunakan, mari kita lihat dengan lebih dekat bagaimana ia membina halaman. Perkara yang sejuk dalam proses ini ialah konsep variasi halaman. Ini bermakna bahawa htmlrenderer menghantar satu peristiwa yang bertanggungjawab untuk mengetahui jenis halaman yang hendak digunakan untuk membungkus array rendering kandungan utama: RenderEvents :: select_page_display_variant. Secara lalai, SimplePageVariant digunakan melainkan modul blok diaktifkan. Dalam kes ini, BlockPageVariant akan bermula dan membolehkan blok diletakkan di kawasan sekitar kandungan utama. Jika anda mahu, anda boleh melanggan acara ini dalam modul anda sendiri dan memberikan variasi anda sendiri.

Semua ini berlaku dalam kaedah menyediakan () htmlrenderer, yang menyediakan #Type = & gt; Dua yang terakhir dibungkus dalam #Type = & gt; Rentetan HTML yang dihasilkan ditambah ke objek tindak balas dan dikembalikan ke pengawal hadapan.

Walaupun ini adalah gambaran keseluruhan tahap proses yang sangat tinggi, ini pada dasarnya adalah apa yang berlaku. Sekarang kita mempunyai objek respons, yang bermaksud kernel boleh menghantar acara kernel. Selepas itu, pengawal hadapan boleh menghantar respons terus kembali kepada pengguna dan menamatkan proses.

Kesimpulan

Dalam artikel ini, kami meneroka secara dalaman Drupal 8 (dan Symfony2) dengan menjejaki tindak balas dari permintaan pengguna ke pulangan pelayan. Kami telah melihat bagaimana Drupal 8 mengambil kesempatan daripada komponen Httpkernel dan Httpfoundation Symfony2, dan bagaimana ia pada dasarnya duduk di atas komponen tersebut. Di samping itu, kita melihat bagaimana pelekat di antara mereka terdiri daripada peristiwa yang dihantar oleh kernel, yang Drupal melanggan semua ciri -cirinya. Akhirnya, kita telah melihat bagaimana untuk membina dan mengembalikan halaman HTML kepada pengguna dengan bantuan saluran paip rendering.

Saya percaya bahawa pemahaman apa yang berlaku di belakang tabir dalam aplikasi Drupal 8 akan membolehkan anda membuat aplikasi yang hebat dengan mengetahui dengan tepat di mana untuk mendapatkan proses ini. Saya percaya bahawa jika anda hanya mengambil satu perkara dari artikel ini, ia harus menjadi perkataan fleksibiliti . Kerana fleksibiliti untuk membina apa yang kita perlukan di Drupal 8 adalah jauh lebih daripada apa -apa di Drupal 7. Ia sememangnya menjadi moden.

FAQs Mengenai Struktur Dalaman Drupal 8 (Soalan Lazim)

Apakah perbezaan utama antara Drupal 7 dan Drupal 8?

Drupal 8 memperkenalkan beberapa perubahan besar berbanding Drupal 7. Ia mempunyai enjin tema baru yang dipanggil Twig, yang lebih selamat dan lebih fleksibel. Drupal 8 juga lebih mesra mudah alih dan termasuk lebih banyak bidang terbina dalam. Ia lebih baik menyokong tapak berbilang bahasa dengan pengurusan bahasa dan sokongan terjemahan yang lebih baik. Di samping itu, Drupal 8 mengintegrasikan lebih baik dengan platform pihak ketiga kerana penggunaan komponen simfoni yang meluas.

Drupal 8 Bagaimana menangani permintaan dan respons?

Drupal 8 Gunakan komponen Symfony Httpkernel untuk mengendalikan permintaan dan tindak balas. Apabila permintaan dibuat, Drupal 8 membuat objek permintaan dan lulus ke Httpkernel. Httpkernel kemudian menggunakan sistem penghalaan untuk menentukan pengawal mana yang harus memproses permintaan tersebut. Pengawal memproses permintaan dan mengembalikan objek tindak balas, yang httpkernel menghantar kembali kepada pelanggan.

Apakah peranan sistem penghalaan di Drupal 8?

Sistem penghalaan di Drupal 8 bertanggungjawab untuk memetakan URL ke pengawal tertentu. Ia menggunakan definisi penghalaan yang disediakan oleh modul untuk menentukan pengawal mana yang harus mengendalikan permintaan yang diberikan. Sistem penghalaan juga menyokong penghalaan dinamik, yang boleh diubah mengikut keadaan sistem.

Bagaimana sistem tema Drupal 8 berfungsi?

sistem tema Drupal 8 menggunakan Twig, enjin templat yang fleksibel dan selamat. Topik dalam Drupal 8 terdiri daripada fail .info.yml (menyediakan metadata mengenai topik) dan fail templat ranting (menentukan output HTML). Sistem tema juga menyokong warisan templat, membolehkan tema untuk melanjutkan dan menimpa templat dari tema atau modul lain.

bagaimana saya membangunkan modul tersuai di Drupal 8?

Membangunkan modul tersuai di Drupal 8 termasuk membuat fail .info.yml untuk menyediakan metadata mengenai modul, dan fail .modul untuk mengandungi kod PHP modul. Modul ini juga boleh mengandungi fail lain, seperti fail penghalaan yang menentukan laluan dan fail perkhidmatan yang menentukan perkhidmatan. Drupal 8 menggunakan pengaturcaraan berorientasikan objek dan komponen simfoni untuk membuat kod yang boleh diguna semula dan boleh diuji lebih mudah.

Apakah faedah menggunakan Drupal 8 untuk pembangunan web?

Drupal 8 menyediakan banyak manfaat untuk pembangunan web. Ia menggunakan komponen Symfony untuk menjadikannya lebih kuat dan fleksibel. Ia menyokong reka bentuk responsif dari kotak, menjadikannya lebih mudah untuk membuat laman web mesra mudah alih. Drupal 8 juga meningkatkan sokongan berbilang bahasa, keupayaan SEO yang lebih baik dan antara muka pengurusan yang lebih mesra pengguna.

Drupal 8 Bagaimana menangani interaksi pangkalan data?

Drupal 8 menggunakan API pangkalan data untuk mengendalikan interaksi pangkalan data. API pangkalan data menyediakan lapisan abstraksi di atas SQL, yang membolehkan pemaju menulis pertanyaan pangkalan data tanpa perlu memahami butiran enjin pangkalan data yang mendasari. Ia juga menyokong pertanyaan dinamik, transaksi dan pengurusan skema.

Apakah peranan penjadual acara di Drupal 8?

penjadual acara di Drupal 8 digunakan untuk menguruskan acara dan pendengar acara. Apabila peristiwa berlaku, penjadual acara memberitahu semua pendengar berdaftar, yang kemudiannya boleh mengambil tindakan. Ini membolehkan modul berinteraksi antara satu sama lain dengan cara yang dipadamkan.

Drupal 8 Bagaimana Menangani Cache?

Drupal 8 mempunyai sistem cache kompleks yang membantu meningkatkan prestasi. Ia menyokong pelbagai backends cache, termasuk pangkalan data, fail dan backend berasaskan memori. Drupal 8 juga mempunyai sistem penandaan cache yang membolehkan kegagalan halus data cache.

bagaimana saya memperluaskan fungsi Drupal 8?

Fungsi Drupal 8 boleh dilanjutkan melalui modul dan tema. Modul menambah ciri -ciri baru atau mengubah suai ciri sedia ada, sementara tema mengawal rupa dan nuansa laman web ini. Drupal 8 juga menyokong pemalam yang membolehkan pertukaran ciri, serta perkhidmatan, dan menyediakan ciri-ciri yang boleh diguna semula yang boleh disuntik ke bahagian lain sistem.

Output yang disemak semula ini mengekalkan makna asal semasa menyusun semula ayat dan perenggan, mengelakkan penyalinan langsung.

Atas ialah kandungan terperinci Dari Permintaan ke Respons: Perjalanan ke Drupal 8 Internal. 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