Artikel ini membawa anda pengetahuan yang berkaitan tentang kitaran pengisytiharan permintaan laravel Kitaran hayat permintaan mempunyai istilah yang berbeza, seperti pemuat automatik, kernel, pembekal perkhidmatan, permintaan penjadualan dan penghalaan, dll. , harap ia membantu. semua orang.
Laravel ialah rangka kerja PHP yang berkuasa Apabila anda mempelajari rangka kerja laravel, kitaran hayat permintaan Laravel ialah titik permulaan yang terbaik. Artikel ini akan memperkenalkan perkara yang berlaku antara penerimaan permintaan HTTP dan respons dalam Laravel. Kajian mendalam tentang kitaran hayat permintaan akan membantu kami memahami struktur Laravel. (Berdasarkan Laravel 8)
Terdapat istilah berbeza untuk kitaran hayat permintaan, seperti autoloader, kernel, pembekal perkhidmatan, permintaan penghantaran dan penghalaan, dsb. Sebaik sahaja anda memahami semua istilah secara terperinci, anda akan lebih memahami rangka kerja tersebut dan boleh memanjangkannya dengan ciri yang berbeza mengikut kehendak anda.
Muatkan kebergantungan projek dan buat contoh aplikasi Laravel
Laravel Titik masuk untuk semua permintaan kepada aplikasi ialah fail public/index.php
. Semua permintaan diarahkan ke fail ini oleh konfigurasi pelayan web anda (Apache/Nginx). Fail index.php itu tidak mengandungi banyak kod. Sebaliknya, ia adalah titik permulaan untuk memuatkan seluruh bingkai.
# 1、加载项目依赖require __DIR__.'/../vendor/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php';
Fail index.php
akan memuatkan definisi autoloader yang dijana oleh Komposer dan kemudian mengambil contoh aplikasi Laravel daripada bootstrap/app.php
.
bootstrap/app.php:
<?php # 2、创建应用实例 $app = new Illuminate\Foundation\Application( $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__) ); # 3、完成内核绑定 $app->singleton( Illuminate\Contracts\Http\Kernel::class, App\Http\Kernel::class ); $app->singleton( Illuminate\Contracts\Console\Kernel::class, App\Console\Kernel::class ); $app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, App\Exceptions\Handler::class ); return $app;
Selepas itu, ia akan bootstrap rangka kerja Laravel untuk menggunakan dan menjana contoh aplikasi.
public/index.php:
# 4、接收请求并响应$kernel = $app->make(Kernel::class);// 处理请求$response = tap($kernel->handle( // 创建请求实例 $request = Request::capture()// 发送响应))->send();$kernel->terminate($request, $response);
Setelah contoh aplikasi dihasilkan, permintaan masuk akan dikendalikan oleh kernel.
Seterusnya, permintaan masuk dihantar sama ada ke kernel HTTP atau kernel Console, bergantung pada jenis permintaan yang masuk ke dalam aplikasi. Kedua-dua teras ini bertindak sebagai lokasi pusat di mana semua permintaan mengalir. Buat masa ini, mari kita fokus pada teras HTTP, yang terletak di app/Http/Kernel.php
.
Teras HTTP memanjangkan kelas IlluminateFoundationHttpkernel
, yang mentakrifkan tatasusunan bootstrapper yang akan dijalankan sebelum melaksanakan permintaan. Bootstrap ini digunakan untuk mengkonfigurasi pengendalian pengecualian, mengkonfigurasi pengelogan, mengesan persekitaran aplikasi dan melaksanakan tugas lain yang perlu diselesaikan sebelum permintaan sebenarnya diproses. Biasanya, anda tidak perlu risau tentang konfigurasi ini.
Teras HTTP juga mentakrifkan senarai perisian tengah HTTP yang mesti dilalui oleh semua permintaan sebelum diproses oleh aplikasi. Perisian tengah ini mengendalikan sesi HTTP membaca dan menulis, menentukan sama ada aplikasi dalam mod penyelenggaraan, mengesahkan token CSRF dan banyak lagi. Kami akan membincangkan perkara ini secara terperinci seterusnya.
Tandatangan kaedah pemegang kernel HTTP adalah sangat mudah: ia menerima antara muka Permintaan dan mengembalikan antara muka Respons. Fikirkan kernel sebagai kotak hitam besar yang mewakili keseluruhan aplikasi. Beri permintaan HTTP dan ia akan mengembalikan respons HTTP.
Teras HTTP juga memuatkan penyedia perkhidmatan dengan mengkonfigurasi perisian tengah dan fungsi lain.
Salah satu operasi but kernel yang paling penting ialah memuatkan service providers
untuk aplikasi. Semua pembekal perkhidmatan untuk aplikasi berada dalam tatasusunan config/app.php
. providers
akan dipanggil pada semua pembekal. Kemudian, setelah semua penyedia didaftarkan, kaedah register
dipanggil pada setiap pembekal. boot
pada mana-mana pembekal perkhidmatan. Jawapannya mudah sahaja. Dengan terlebih dahulu memanggil kaedah daftar setiap pembekal perkhidmatan, pembekal perkhidmatan boleh bergantung pada setiap pengikatan kontena yang didaftarkan dan tersedia apabila kaedah but dilaksanakan. boot
ini. app/Providers
Setelah aplikasi di-bootstrap dan semua pembekal perkhidmatan didaftarkan dan di-bootstrap, permintaan diserahkan kepada penghala untuk dihantar.
Salah satu penyedia perkhidmatan yang paling penting dalam aplikasi ialah AppProvidersRouteServiceProvider
. Pembekal perkhidmatan ini memuatkan fail laluan yang terkandung dalam direktori routes
aplikasi.
Penghala menghantar permintaan kepada laluan atau pengawal dan menjalankan sebarang perisian tengah khusus laluan.
Middleware menyediakan mekanisme yang mudah untuk menapis atau memeriksa permintaan HTTP yang memasuki aplikasi. Sebagai contoh, Laravel menyertakan perisian tengah yang mengesahkan bahawa pengguna aplikasi anda telah disahkan. Jika pengguna tidak disahkan, middleware mengubah hala pengguna ke halaman log masuk. Walau bagaimanapun, jika pengguna disahkan, middleware akan membenarkan permintaan itu terus ke dalam aplikasi. Sesetengah perisian tengah diperuntukkan kepada semua laluan dalam aplikasi, seperti yang ditakrifkan dalam atribut $middleware
teras HTTP, manakala sesetengahnya hanya diperuntukkan kepada laluan atau kumpulan laluan tertentu. Anda boleh mengetahui lebih lanjut tentang middleware dengan membaca dokumentasi middleware yang lengkap.
Arahkan permintaan HTTP kepada pengawal atau kembalikan pandangan atau respons secara terus dengan meninggalkan pengawal jika permintaan itu melepasi semua middleware yang diberikan oleh laluan yang sepadan
Pengawal app/Http/Controllers/
lakukan tindakan khusus dan hantar data ke paparan.
Lihat resources/views/
Formatkan data dengan sewajarnya, memberikan respons HTTP.
Sebaik sahaja laluan atau kaedah pengawal mengembalikan respons, respons dikembalikan melalui perisian tengah laluan, memberi peluang kepada aplikasi untuk mengubah suai atau memeriksa respons keluar.
Biasanya, anda bukan sahaja akan mengembalikan rentetan atau tatasusunan ringkas daripada operasi penghalaan. Sebaliknya, contoh atau paparan IlluminateHttpResponse
lengkap dikembalikan.
Kejadian respons diperoleh daripada kelas SymfonyComponentHttpFoundationResponse
, yang menyediakan beberapa kaedah untuk membina respons HTTP.
Akhir sekali, sebaik sahaja respons dihantar semula melalui perisian tengah, kaedah pemegang teras HTTP mengembalikan objek respons dan index.php
fail memanggil kaedah hantar pada respons yang dikembalikan. Kaedah hantar menghantar kandungan respons kepada pelayar web pengguna.
Pada ketika ini, kami telah menyelesaikan semua langkah bagi keseluruhan kitaran hayat permintaan Laravel!
[Cadangan berkaitan: tutorial video laravel]
Atas ialah kandungan terperinci Penjelasan dan kes terperinci: Pengenalan kepada kitaran hayat permintaan Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!