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é.

166c3abbf40dd41bb1463e38e8cbc2e9683720dc

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:

  1. Routing trong app/route.php
  2. Controller trong app/controllers/
  3. 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

screen-shot-2016-11-30-at-5-11-43-pm

 

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.

  1. Workbench: cho phép bạn phát triển và debug các packages cạnh ứng dụng của bạn
  2. 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
  3. 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

screen-shot-2016-11-30-at-5-12-22-pm

Ở đâ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.

  1. 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.
  2. 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
  3. 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.
  4. 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.
  5. 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
  6. Booting callbacks
    Bất kỳ callbacks nào được khai báo trong
    App::booting() sẽ được gọi
  7. 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.
  8. 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.
  9. 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
  10. 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.
Giải quyết mọi vấn đề trong Scalable Social Network – Đăng kí ngay!
Giải quyết mọi vấn đề trong Scalable Social Network – Đăng kí ngay!

Phần 3: Bước Running

screen-shot-2016-11-30-at-5-13-40-pm

Ở đâ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.

  1. 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.
  2. 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.
  3. 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
  4. 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.
  5. 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
  6. 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.
  7. 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ề
  8. 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()
  9. Finish callbacks
    Nếu có bất kỳ callback nào được đăng ký với
    App::finish(), nó sẽ được gọi.
  10. 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.

Chia sẻ bài viết ngay