Laravel Request Lifecycle: How it works!

ảnh: Unsplash

Để làm việc với một công cụ chúng ta cần phải biết, nhưng để đi được xa hơn chúng ta cần hiểu sâu sắc về công cụ đó. Đối với Laravel cũng vậy, để có thể thoải mái và tự tin sử dụng nó thì ta cần phải biết nó hoạt động như thế nào thay vì chỉ biết code để cho nó chạy.

Điều đầu tiên là phải tham khảo tài liệu chính thức trước khi đọc bất cứ bài viết nào khác:
https://laravel.com/docs/7.x/lifecycle

Bài viết này sẽ giúp các bạn hiểu cách hoạt động của Laravel, cách nó xử lý các request và trả về response tới người dùng. Chúng ta sẽ tìm hiểu nó theo từng bước sau:

Bước đầu tiên, yêu cầu sẽ được kích hoạt từ trình duyệt của người dùng, sau đó nó sẽ đến máy chủ web. Máy chủ web (Apache hoặc Nginx) sẽ chuyển hướng yêu cầu đã cho đến tệp public/index.php, đây là điểm bắt đầu của Laravel.

Trong file index.php sẽ load ra các package được install từ Composer và khởi tạo Autoloader, và sau đó khởi tạo bộ khung làm việc của framework Laravel từ bootstrap/app.php.

Tiếp theo, yêu cầu đến được gửi đến HTTP kernel hoặc Console kernel, tùy thuộc vào loại yêu cầu đang nhập vào ứng dụng. Hai kernel này đóng vai trò là trung tâm điều khiển mà tất cả các yêu cầu đều chạy 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, vị trí của nó nằm ở app/Http/Kernel.php.

HTTP kernel được extends từ class Illuminate\Foundation\Http\Kernel, nó định nghĩa một mảng bootstrappers sẽ được chạy trước khi các request được thực thi. Những bootstrappers cấu hình việc xử lý lỗi, cấu hình logging, detect the application environment, và thực hiện các nhiệm 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ác requests phải đi qua trước khi được ứng dụng sử lý. Các middleware này xử lý đọc và ghi HTTP session, xác định xem ứng dụng có đang ở chế độ bảo trì hay không, xác minh the CSRF token, và hơn thế nữa.

Phương thức cho HTTP kernel là `handle` có vẻ rất đơn giản: nhận một Request và trả về một Response. Hãy suy nghĩ về 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.

Một trong những hành động khởi động 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 service providers cho ứng dụng được cấu hình trong config/app.php trong mảng providers . Đầu tiên, phương thức register sẽ được gọi trong tất cả các providers, sau đó, khi tất cả các providers đã được đăng ký, phương thức boot sẽ được gọi.

Các Service providers chịu trách nhiệm khởi động tất cả các components khác nhau của Framework như: database, queue, validation, và routing components. Vì chúng khởi động và cấu hình mọi tính năng được cấu hình được cung cấp bởi framework nên các service providers là thành phần quan trọng nhất của toàn bộ quá trình khởi động Laravel.

Khi ứng dụng được khởi động xong và tất cả các service providers đã được đăng ký, các Request sẽ được đưa đến Router. Các router sẽ kiểm tra các yêu cầu được chuyển đến controller, có thể trả trực tiếp dữ liệu, cũng như là chạy qua bất kỳ middleware nào đó mà request yêu cầu.

Bộ định tuyến sẽ hướng HTTP request đến Controller hoặc trả về view hoặc response trực tiếp bằng cách bỏ qua Controller. Các tuyến đường này sẽ được đặt trong app/routes.php.

Controller được đặt trong app/controllers/ sẽ thực hiện các hành động cụ thể và gửi dữ liệu đến một view. Trong app/views/ sẽ định nghĩa các file view dạng blade được return từ Controller.

Nguồn ảnh: Internet

Ví dụ thực tế

1. Người dùng nhập buihuycuong.com trong trình duyệt và nhấn ‘enter’.

2. Khi người dùng nhấn vào URL này, trình duyệt sẽ gửi yêu cầu trang qua Internet đến máy chủ web.

3. Máy chủ web sẽ nhận yêu cầu và phân tích thông tin yêu cầu. Trong tệp cấu hình của máy chủ web, đường dẫn gốc của trang web được chỉ định.

4. Máy chủ web sẽ chuyển yêu cầu đến tệp public/index.php của laravel.

5. Trong bước này, Trình thông dịch PHP sẽ thực thi code trong index.php từ yêu cầu(các package tạo bởi composer sẽ được load)

6. Tạo ra một instance Laravel và khởi tạo các component trong Laravel.

7. Kernel sẽ nhận các yêu cầu, tải các service providers và chuyển hướng đến Router.

8. Router sẽ điều hướng đến controller và thực hiện render view/content để gửi lại web server.

9. Máy chủ web nhận output từ PHP và gửi lại qua Internet tới trình duyệt web của user.

10. Trình duyệt web của người dùng nhận phản hồi từ máy chủ và hiển thị trang web trên máy tính của người dùng.

Bài sau sẽ đi vào chi tiết từng phần, từng dòng của Laravel khi nó đi qua sẽ có những gì từ việc bắt đầu người dùng request đến khi nhận được response từ server.

https://laravel.com/docs/7.x/lifecycle
http://blog.mallow-tech.com/2016/06/request-life-cycle-of-laravel/

Be Curious!| ☕️+✍🏼=❤️ | buihuycuong.com

Be Curious!| ☕️+✍🏼=❤️ | buihuycuong.com