Tổng quan vòng đời Request trong Laravel:
Bước đầu tiên:
File public/index.php đăng ký Auto Loader. Sau đó tạo ra 1 instance của ứng dụng từ file bootstrap/app.php.
HTTP / Console Kernels:
Tiếp theo, request được gửi đi HTTP kernel hoặc console kernel, tùy thuộc loại request. 2 kernel này phục vụ như 1 vị trí trung tâm nơi tất cả request đều đi qua. Chúng ta sẽ tập trung vào HTTP kernel trong file app/Http/Kernel.php.
HTTP kernel kế thừa class Illuminate\Foundation\Http\Kernel, định nghĩa 1 mảng bootstrappers mà sẽ chạy trước khi request được thực thi. Những bootstrappers này cấu hình xử lý lỗi, logging, xác định môi trường, thực thi những task cần thiết trước khi request được xử lý.
HTTP kernel cũng định nghĩa 1 list middleware mà tất cả request phải pass qua trước khi được xử lý. Middleware đọc và ghi session, xác định xem ứng dụng có đang bảo trì, xác minh CSRF token …
Phương thức của HTTP kernel rất đơn giản: nhận 1 Request và trả về 1 Response.
Service Providers:
1 trong những việc quan trọng lúc khởi động kernel là load Service Providers. Service providers chịu trách nhiệm khởi động tất cả các components của Laravel như database, queue, validation, routing. Tất cả service providers được cấu hình trong config/app.php (array providers).
Laravel sẽ lặp qua list providers và tạo instance từng cái một, sau đó phương thức register được gọi trên tất cả providers. Tiếp theo phương thức boot sẽ được gọi. Điều này là để các service providers có thể phụ thuộc trên mỗi container binding được đăng ký và có sẵn tại thời điểm method boot được thực thi.
Các tính năng chính được khởi động và cấu hình bởi service provider. Service providers là phần quan trọng nhất trong quá trình khởi động Laravel.
Routing: định tuyến
Một service provider quan trọng nhất là App\Providers\RouteServiceProvider. Provider này load route file trong thư mục routes. Khi ứng dụng được khởi động và các provider được register, Request sẽ được xử lý bởi router. Router sẽ gửi request đến 1 route hay controller, hoặc chạy middleware.
Middleware cung cấp cơ chế filter (lọc) hoặc kiểm tra các request HTTP. Ví dụ, Laravel có 1 middleware xác thực người dùng đã đăng nhập chưa. Nếu chưa thì redirect đến login. Nếu đã đăng nhập thì cho phép request thực thi. 1 số middleware được gán cho tất cả route, trong defined thuộc tính $middleware của HTTP kernel, 1 số middleware khác thì được gán cho 1 số route hoặc route group.
Một khi route hoặc controller trả về 1 response, response sẽ quay lại middleware, để thay đổi hoặc kiểm tra dữ liệu ra ngoài.
Cuối cùng khi response qua middleware, phương thức handle của HTTP kernel trả về 1 response object và index.php gọi method send(), trả về nội dung cho trình duyệt.
Các service provider mặc định được lưu trữ trong thư mục app/Providers.
