Tìm hiểu về Request Lifecycle
Chắc hẳn các bạn đã nghe nói hoặc dùng với PHP Framework là Laravel rồi đúng không. Vậy điều gì xẽ xảy ra khi có một request đến một URL được định nghĩa trong route của ứng dụng? Cách thức hoạt động của Framework ra sao? Bài viết này sẽ giúp bạn hiểu thêm về Framework này nhé. ...
Chắc hẳn các bạn đã nghe nói hoặc dùng với PHP Framework là Laravel rồi đúng không. Vậy điều gì xẽ xảy ra khi có một request đến một URL được định nghĩa trong route của ứng dụng? Cách thức hoạt động của Framework ra sao? Bài viết này sẽ giúp bạn hiểu thêm về Framework này nhé.
The standard Lifecycle là gì?
- Một HTTP Request định tuyến tới một Controller
- Controller thực thi các actions cụ thể và chuyển data tới View
- View định dạng dữ liệu một cách thích hợp. cung cấp HTTP Response
Có rất nhiều trường hợp ngoại lệ và phương sai với flow trên, nhưng điều này cung cấp cho bạn ba nơi cơ bản để bắt đầu:
- Routing trong app/route.php
- Controller trong app/controllers/
- View trong app/views/
Một số trường hợp ngoại lệ như trên là:
- Route trả về Views hoặc Response trực tiếp, bỏ qua việc sử dụng Controller
- Filters (trong app/filters.php) có thể xuất hiện trước hoặc sau route
- Lỗi và xử lý ngoại lệ
- Phản hồi Events
Một sự hiểu biết sâu sắc về Request Lifecycle cho thấy một số nơi mà ta có thể viết code. Toàn bộ Lifecycle của một request có thể chia làm 3 phần: Loading, Booting và Running.
Phần 1: Loading
Có 3 phần chính mà bạn nơi mà ứng dụng của bạn có thể ảnh hưởng đến bước Loading trong Request Lifecycle.
- Workbench: cho phép bạn phát triển và debug các packages cạnh ứng dụng của bạn
- Environment Detections: bạn nên sửa đổi bootstrap/start.php và thêm nhận diện cho ứng dụng của bạn
- Paths: Bạn có thể sửa đổi bootstrap/paths.phpđể tùy chỉnh các cài đặt của bạn. Ví dụ như thay đổi thư mục Storage.
Phần 2: Booting
Ở đây có 10 khu vực khác nhau mà ứng dụng của bạn có thể tác động lên Request Lifecycle.
- Configuration
Cấu hình của ứng dụng của bạn ảnh hưởng đến cả quá trình khởi động và vận hành của Laravel. - Service Providers
Bất kỳ một Service Providers nào mà bạn tạo hoặc link vào ứng dụng đều được load sớm trong tiến trình booting. Nếu một service provider của bạn không được trì hoãn thì phương thức register() sẽ được gọi vào thời điểm này - Registering the start files
3 files khởi động ứng dụng của bạn (#8, #9, #10 bên dưới) được đăng ký để khởi động khi sự kiện khởi động ứng dụng xảy ra. - Handle middleware going down
Middleware hoạt động tương tự như những búp bê lồng nhau của Nga. Tức là ứng dụng sẽ khởi động qua từng lớp phần cấp khác nhau một cách lần lượt theo từng cấp độ. Từ trên xuống dưới. - Booting service providers
Bây giờ phương thức boot() trên bất kỳ service providers không bị trì hoãn sẽ được gọi - Booting callbacks
Bất kỳ callbacks nào được khai báo trong App::booting() sẽ được gọi - Booted callbacks
Tại thời điểm này ứng dụng của chúng ta đã được khởi động. Bất kỳ callbacks được khai báo trong App::booted() sẽ được gọi. Nó bao gồm tất cả những callbacks được load ở 3 files trong bước 3 ở trên. - Your application start script is called
Đó là file app/start/globals.php. File này chứa các khởi tạo mà bạn muốn ứng dụng luôn luôn thực hiện trước khi xử lý bất kỳ request nào. Laravel cung cấp hợp lý các mặc định cho Logging, Exception, Maintenance mode. Bạn có thể sửa file này và đặt bất cứ xử lý nào mà bạn cần thực hiện trong nó, nhưng nên chắc chắn rằng bạn đã giữ app/filters.php. - app/start/{environment}.php
Nếu bạn cần mã khởi tạo để chỉ thực hiện trong môi trường nhất định, bạn có thể đặt nó trong tập tin này - app/routes.php
Định tuyến ứng dụng của bạn. Đây là một trong những tập tin phổ biến nhất mà bạn sẽ chỉnh sửa khi thiết lập các ứng dụng.
Phần 3: Bước Running
Ở đây có 10 khu vực khác nhau mà ứng dụng của bạn có thể tác động lên Request Lifecycle.
- Maintenance Mode
Nếu bạn có một maintenance mode listener và ứng dụng của bạn đang ở trạng thái maintenance thì listener đó sẽ được thực thi. - App “before” filters
Nếu có bất kỳ before filter nào được đăng ký với App::before(), nó sẽ được gọi. - Route/Controller “before” filters
Nếu có bất kỳ before filters nào được đặt ở mức route hay controller thì nó sẽ được gọi - The action
Đây là nơi mà một controller method hoặc route callback được gọi để xử lý các yêu cầu. - Route/Controller “after” filters
Nếu có bất kỳ after filters nào được đặt ở mức route hay controller thì nó sẽ được gọi - App “after” filters
Nếu có bất kỳ after filter nào được đăng ký với App::after(), nó sẽ được gọi. - Middleware response handling
Đây là điểm mà các ngăn xếp middleware được thực hiện. Bất kỳ mảnh nào của middleware sẽ được giải phóng và sửa đổi response trước khi chúng được trả về - Middleware shutdown
Nếu bạn cung cấp bất kỳ một middleware nào được triển khai trong TerminableInterface, nó sẽ gọi phương thức shutdown() - Finish callbacks
Nếu có bất kỳ callback nào được đăng ký với App::finish(), nó sẽ được gọi. - Shutdown callbacks
Cuối cùng, Nếu có bất kỳ callback nào được đăng ký với App::shutdown(), nó sẽ được gọi.
Qua bài viết này hy vọng có thể cung cấp thêm cho các bạn kiến thức về Request Lifecycle trong ứng dụng Laravel.