Kitaran permintaan
- Fokus pada pembekal perkhidmatan
- Pengenalan
- Apabila menggunakan sebarang alat dalam "kehidupan harian", jika anda memahami prinsip kerja alat tersebut. Kemudian ia akan menjadi lebih mudah untuk digunakan. Perkara yang sama berlaku untuk pembangunan aplikasi Apabila anda benar-benar dapat memahami prinsip pelaksanaan di sebalik fungsi, ia akan menjadi lebih mudah dan lebih mudah untuk menggunakannya. Tujuan dokumen ini adalah untuk memberi anda pemahaman yang lebih jelas tentang cara rangka kerja Laravel berfungsi. Dapatkan pandangan holistik melalui rangka kerja supaya semuanya tidak lagi terasa "ajaib." Percayalah, ini akan membantu anda menjadi lebih sedar tentang perkara yang anda lakukan dan lebih yakin tentang perkara yang anda mahu lakukan. Walaupun anda tidak memahami semua istilah, jangan hilang keyakinan! Cubalah sedikit, pelajari cara menggunakannya dan pengetahuan anda pasti akan berkembang semasa anda bergerak melalui bahagian lain dalam dokumentasi.
Gambaran keseluruhan kitaran hidup
Pertama sekali
Semua entri permintaan untuk aplikasi Laravel adalah fail public/index.php
. Semua permintaan diarahkan ke fail ini melalui pelayan web anda (Apache/Nginx) melalui konfigurasi. Fail index.php
tidak mempunyai banyak kod, tetapi ia adalah titik permulaan untuk memuatkan seluruh rangka kerja. public/index.php
文件。而所有的请求都是经由你的 Web 服务器(Apache/Nginx)通过配置引导到这个文件。 index.php
文件代码并不多,但是,这里是加载框架其它部分的起点。
index.php
文件加载 Composer 生成的自动加载设置,然后从 bootstrap/app.php
脚本中检索 Laravel 应用程序的实例。 Laravel 本身采取的第一个动作是创建一个应用程序 / 服务容器。
HTTP / Console 内核
接下来, 根据进入应用程序的请求类型来将传入的请求发送到 HTTP 内核或控制台内核。而这两个内核是用来作为所有请求都要通过的中心位置。 现在,我们先看看位于 app/Http/Kernel.php
中的 HTTP 内核。
HTTP 内核继承了 IlluminateFoundationHttpKernel
类,该类定义了一个 bootstrappers
数组。 这个数组中的类在请求被执行前运行,这些 bootstrappers 配置了错误处理, 日志, 检测应用环境,以及其它在请求被处理前需要执行的任务。
HTTP 内核还定义了所有请求被应用程序处理之前必须经过的 HTTP 中间件 ,这些中间件处理 HTTP 会话 读写、判断应用是否处于维护模式、 验证 CSRF 令牌 等等。
HTTP 内核的 handle
方法签名相当简单:获取一个 Request
,返回一个 Response
。可以把该内核想象作一个代表整个应用的大黑盒子,输入 HTTP 请求,返回 HTTP 响应。
服务提供者
内核启动操作中最重要的便是你应用的 服务提供者 了。所有应用下的服务提供者均配置到了 config/app.php
配置文件中的 providers
数组中。 第一步,所有服务提供者的 register
方法会被调用,然后一旦所有服务提供者均注册后, boot
方法才被调用。
服务提供者给予框架开启多种多样的组件,像数据库,队列,验证器,以及路由组件。只要被启动服务提供者就可支配框架的所有功能,所以服务提供者也是 Laravel 整个引导周期最重要组成部分。
请求调度
一旦启动且所有服务提供者被注册,Request
index.php
memuatkan tetapan autoload yang dijana oleh Composer dan kemudian mendapatkan semula tika aplikasi Laravel daripada skrip bootstrap/app.php
. Tindakan pertama yang diambil oleh Laravel sendiri ialah mencipta bekas aplikasi/perkhidmatan. app/Http/Kernel.php
. IlluminateFoundationHttpKernel
, yang mentakrifkan tatasusunan bootstrappers
. Kelas-kelas dalam tatasusunan ini dijalankan sebelum permintaan itu dilaksanakan. 🎜🎜Teras HTTP juga mentakrifkan perisian tengah HTTP yang mesti dilalui oleh semua permintaan sebelum diproses oleh aplikasi ini mengendalikan pembacaan dan penulisan sesi HTTP, tentukan sama ada aplikasi dalam mod penyelenggaraan, sahkan token CSRF, dsb. 🎜🎜Tandatangan kaedah handle
kernel HTTP agak mudah: dapatkan Request
dan kembalikan Respons
. Fikirkan kernel ini sebagai kotak hitam besar yang mewakili keseluruhan aplikasi, menerima permintaan HTTP dan membalas respons HTTP. 🎜Pembekal Perkhidmatan
🎜Perkara yang paling penting dalam operasi permulaan kernel ialah pembekal perkhidmatan aplikasi anda. Pembekal perkhidmatan di bawah semua aplikasi dikonfigurasikan dalam tatasusunanpembekal
dalam fail konfigurasi config/app.php
. Dalam langkah pertama, kaedah daftar
bagi semua pembekal perkhidmatan dipanggil, dan selepas semua pembekal perkhidmatan didaftarkan, kaedah boot
dipanggil. 🎜🎜Pembekal perkhidmatan membolehkan rangka kerja mendayakan pelbagai komponen, seperti pangkalan data, baris gilir, pengesah dan komponen penghalaan. Selagi pembekal perkhidmatan dimulakan, ia boleh mengawal semua fungsi rangka kerja, jadi pembekal perkhidmatan juga merupakan komponen terpenting bagi keseluruhan kitaran but Laravel. 🎜Penjadualan Permintaan
🎜Setelah dimulakan dan semua pembekal perkhidmatan didaftarkan,Permintaan
akan dihantar ke penghala . Penghala akan menghantar permintaan ke laluan terikat atau pengawal, dan sudah tentu perisian tengah terikat laluan. 🎜🎜🎜🎜🎜🎜🎜Fokus pada penyedia perkhidmatan
Pembekal perkhidmatan adalah kunci kepada kitaran hayat sebenar Laravel. Sebaik sahaja contoh aplikasi dibuat, pembekal perkhidmatan didaftarkan dan kemudian diminta untuk diambil alih oleh aplikasi yang dilancarkan. Pastikan ia mudah!
Mempunyai pemahaman yang kukuh tentang cara pembekal perkhidmatan dibina dan cara mereka bekerja dengan aplikasi Laravel adalah sangat berharga. Sudah tentu, pembekal perkhidmatan lalai aplikasi anda akan disimpan di bawah apl/Pembekal
. app/Providers
下面。
默认的, AppServiceProvider
AppServiceProvider
kosong. Pembekal ini ialah tempat yang baik untuk menambah pengikatan kontena bootstrap dan perkhidmatan anda sendiri. Sudah tentu, dalam projek besar, anda mungkin ingin mencipta beberapa pembekal perkhidmatan yang lebih terperinci. .