kedalaman ke Drupal 8 (dan Symfony2): Proses permintaan-ke-tindak balas
mata teras
objek mengikut peraturan HttpkernelInterface Symfony?
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. objek dan sentiasa mengembalikan objek objek. Konsep yang sangat mudah tetapi berkuasa.
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.
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. 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) 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 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. 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. 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. 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. 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 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. 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 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. 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. httpkernel dan peristiwa
Apakah perbezaan utama antara Drupal 7 dan Drupal 8?
Drupal 8 Bagaimana menangani permintaan dan respons?
Apakah peranan sistem penghalaan di Drupal 8?
Bagaimana sistem tema Drupal 8 berfungsi?
bagaimana saya membangunkan modul tersuai di Drupal 8?
Apakah faedah menggunakan Drupal 8 untuk pembangunan web?
Drupal 8 Bagaimana menangani interaksi pangkalan data?
Apakah peranan penjadual acara di Drupal 8?
Drupal 8 Bagaimana Menangani Cache?
bagaimana saya memperluaskan fungsi Drupal 8?
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!