Request Lifecycle With Laravel
Bài đăng này đã không được cập nhật trong 7 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ừcomposerbootstrap/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ảngbootstrappersẽ đượ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 Kernelcũng định nghĩa một danh sách HTTP middleware mà tất cả cácrequestphả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 Kernelnhư 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.phptrong mảngproviders. Đầu tiên, phương thứcregistersẽ được gọi trên tất cả cácproviderssau đó, khi tất cả cácprovidersđã được đăng ký, phương thứcbootsẽ được gọi để nap tất cả cácproviders -
Các
Service Providerschị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,validationvà 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