Request Lifecycle With Laravel
Bài đăng này đã không được cập nhật trong 6 năm
Lời nói đầu.
Khi sử dụng bất kỳ công cụ nào , chúng ta đều cảm thấy tự tin hơn nếu chúng ta có thể hiểu cách công cụ đó hoạt động. Việc phát triển ứng dụng cũng vậy. Khi bạn hiểu các công cụ phát triển hoạt động như thế nào, bạn cảm thấy thoải mái và tự tin hơn khi sử dụng chúng.
Mục đích của bài viết này là cung cấp cho bạn một cái nhìn tổng quan cách hoạt động của Laravel. Bằng cách có 1 cái nhìn tổng thể hơn,bạn sẽ cảm thấy mọi thứ cảm thấy ít "huyền diệu" hơn và tự tin hơn khi xây dựng các ứng dụng của mình. Ok, Let start !
Lifecycle Overview
First Things
Giống như mọi loại framework khác, mọi request của một ứng dụng Laravel đều được bắt đầu từ file public/index.php
. Tất cả các request chuyển đến file này đều được chuyển đến từ Web Server của bạn (Apache / Nginx
). Trong file index.php
sẽ không bao gồm nhiều đoạn code . Thay vào đó nó là điểm khởi đầu để loading phần còn lại của framework.
Nhìn vào source code của file này chúng ta sẽ thấy nó sẽ load ra 3 phần :
bootstrap/autoload.php
==> Khởi tạo Auto Loader để load ra các package được install từcomposer
bootstrap/app.php
==> Khợi tạo bộ khung làm việc của framwork bao gồmHttp Kernel
=> xử lý các request từ brower lên serverConsole Kernel
=> xử lý các request từ các lệnh comand (Vd :php artisan
,php artisan migrate
, .v.v....v)ExceptionHandler
=> xử lý lỗi.
- Khởi tạo ra
Kernel
để làm tiếp tục đi tiếp
HTTP / Console Kernels
Tiếp theo, các request sẽ được gửi đến Http Kernel
hoặc Console Kernel
tùy thuộc vào loại yêu cầu đang cập nhật ứng dụng (Dùng browser hay command). 2 Kernel
này sẽ như là trung tâm điều khiển mà tất cả các yêu cầu sẽ phải đi qua tuy nhiên trong bài viết này chúng ta hãy chỉ tập trung vào tìm hiểu Http Kernel
thôi nhé . Vị trí của nó nằm ở app/Http/Kernel.php
.
-
Http Kernel
được extends từ classIlluminate\Foundation\Http\Kernel
. Nó định nghĩa một mảngbootstrapper
sẽ được chạy trước khi request được thực thi. Những bootstrappers cấu hình việc xử lý lỗi, cấu hìnhlogs
,phát hiện môi trường ứng dụng (develop
,staging
, 'production`) và thực hiện các tác vụ khác cần được thực hiện trước khi request thực sự được xử lý. -
Http Kernel
cũng định nghĩa một danh sách HTTP middleware mà tất cả cácrequest
phải đi qua trước khi được ứng dụng xử lý. Các HTTP middleware này xử lý việc đọc và ghi HTTP session, xác định xem ứng dụng có đang ở chế độ bảo trì hay không, xác minh token CSRF và hơn thế nữa. -
Hãy suy nghĩ về
Http Kernel
như là một trung tâm điều hành đại diện cho toàn bộ ứng dụng của bạn. Cung cấp cho nó các request HTTP và nó sẽ trả về các response HTTP.
Service Providers
-
Một trong những hành động khởi động hạt nhân quan trọng nhất là tải các Service Providers cho ứng dụng của bạn.
-
Tất cả các nhà cung cấp dịch vụ cho ứng dụng được cấu hình trong
config / app.php
trong mảngproviders
. Đầu tiên, phương thứcregister
sẽ được gọi trên tất cả cácproviders
sau đó, khi tất cả cácproviders
đã được đăng ký, phương thứcboot
sẽ được gọi để nap tất cả cácproviders
-
Các
Service Providers
chịu trách nhiệm khởi động tất cả các thành phần khác nhau của Framework như :database
,queue
,validation
và các thành phần định tuyến (routing
). Vì chúng khởi động và cấu hình mọi tính năng được cung cấp bởi framework nên Service Providers` là thành phần quan trọng nhất của toàn bộ quá trình khởi động Laravel.
Dispatch Request
Khi ứng dụng đã được khởi động xong và tất cả các Service Providers
đã được khởi tạo thành công. Các Request
sẽ được đưa đến các bộ định tuyến ( router
). Ở đây, các yêu cầu sẽ được được kiểm tra xem có tồn tại hay không , có cần chạy qua HTTP middleware đặc biệt nào hay không và cuối cùng sẽ được điểu chuyển đến các Controller
hoặc router
(Các function tự định nghĩ trong router)
Đến đây thì chắc mình không cần viết thêm chúng nó tiếp tục chạy ntn nữa rồi nhỉ, vì ai cũng biết rồi =)) .
Kêt luận.
Ok, vậy là trên đây là mình đã miêu tả vòng đời của request nó như thế nào rồi. Mong rằng bài viết sẽ hữu ích với các bạn. Thank you for read!
Tài liệu tham khảo
All rights reserved