Giao diện
Vòng đời Request (Request Lifecycle)
Giới thiệu (Introduction)
Khi sử dụng bất kỳ công cụ nào trong "thế giới thực", bạn sẽ tự tin hơn nếu hiểu cách công cụ đó hoạt động. Phát triển ứng dụng cũng không khác. Khi bạn hiểu cách công cụ phát triển vận hành, bạn cảm thấy thoải mái và tự tin hơn khi sử dụng chúng.
Mục tiêu của tài liệu này là cung cấp cho bạn cái nhìn tổng quan ở mức cao về cách Laravel framework hoạt động. Khi hiểu framework tốt hơn, mọi thứ sẽ bớt "ma thuật" hơn và bạn sẽ tự tin hơn khi xây dựng ứng dụng. Nếu bạn chưa hiểu hết tất cả thuật ngữ ngay, đừng nản lòng! Hãy cố nắm bắt cơ bản những gì đang diễn ra, kiến thức sẽ phát triển khi bạn khám phá các phần khác của tài liệu.
Tổng quan vòng đời (Lifecycle Overview)
Bước đầu tiên (First Steps)
Điểm vào (entry point) cho tất cả requests đến ứng dụng Laravel là file public/index.php. Tất cả requests được chuyển đến file này bởi cấu hình web server (Apache/Nginx). File index.php không chứa nhiều code. Thay vào đó, nó là điểm bắt đầu để tải phần còn lại của framework.
File index.php tải Composer autoloader, sau đó lấy một instance của ứng dụng Laravel từ bootstrap/app.php. Hành động đầu tiên của Laravel là tạo một instance của application / service container.
HTTP / Console Kernels
Tiếp theo, request đến được gửi tới HTTP kernel hoặc console kernel, sử dụng methods handleRequest hoặc handleCommand của application instance, tùy thuộc vào loại request. Hai kernels này đóng vai trò là vị trí trung tâm mà tất cả requests đều đi qua. Hiện tại, hãy tập trung vào HTTP kernel, là instance của Illuminate\Foundation\Http\Kernel.
HTTP kernel định nghĩa một mảng bootstrappers sẽ được chạy trước khi request được thực thi. Các bootstrappers cấu hình xử lý lỗi, cấu hình logging, phát hiện môi trường ứng dụng và thực hiện các tác vụ khác cần hoàn thành trước khi request thực sự được xử lý.
HTTP kernel cũng chịu trách nhiệm đưa request qua middleware stack của ứng dụng. Các middleware xử lý đọc/ghi HTTP session, xác định ứng dụng có đang trong chế độ bảo trì hay không, xác minh CSRF token, và nhiều hơn.
Method signature của HTTP kernel khá đơn giản: nó nhận Request và trả về Response. Hãy nghĩ kernel như một hộp đen lớn đại diện cho toàn bộ ứng dụng. Đưa HTTP requests vào và nó sẽ trả lại HTTP responses.
Service Providers
Một trong những hành động bootstrapping quan trọng nhất của kernel là tải service providers cho ứng dụng. Service providers chịu trách nhiệm bootstrapping tất cả các component khác nhau của framework, như database, queue, validation và routing.
Laravel sẽ duyệt qua danh sách providers và khởi tạo từng cái. Sau khi khởi tạo tất cả providers, method register sẽ được gọi trên tất cả. Sau đó, khi tất cả providers đã được đăng ký, method boot sẽ được gọi trên từng provider. Điều này để service providers có thể phụ thuộc vào mọi container binding đã được đăng ký và sẵn sàng khi method boot của chúng được thực thi.
Về bản chất, mọi tính năng chính mà Laravel cung cấp đều được bootstrapped và cấu hình bởi service provider. Vì chúng bootstrap và cấu hình rất nhiều tính năng, service providers là khía cạnh quan trọng nhất của toàn bộ quá trình bootstrap Laravel.
Trong khi framework nội bộ sử dụng hàng chục service providers, bạn cũng có tùy chọn tạo providers của riêng mình. Bạn có thể tìm danh sách service providers do người dùng định nghĩa hoặc bên thứ ba trong file bootstrap/providers.php.
Routing (Định tuyến)
Khi ứng dụng đã được bootstrapped và tất cả service providers đã đăng ký, Request sẽ được chuyển đến router để dispatching. Router sẽ dispatch request đến route hoặc controller, cũng như chạy bất kỳ middleware cụ thể nào của route.
Middleware cung cấp cơ chế thuận tiện để lọc hoặc kiểm tra HTTP requests đến ứng dụng. Ví dụ, Laravel bao gồm middleware xác minh user có đã xác thực hay không. Nếu chưa xác thực, middleware sẽ chuyển hướng user đến màn hình đăng nhập. Nếu đã xác thực, middleware cho phép request tiếp tục. Một số middleware được gán cho tất cả routes, như PreventRequestsDuringMaintenance, trong khi một số chỉ gán cho routes hoặc route groups cụ thể. Bạn có thể tìm hiểu thêm về middleware bằng cách đọc tài liệu middleware.
Nếu request đi qua tất cả middleware được gán cho route, method của route hoặc controller sẽ được thực thi và response được trả lại qua chuỗi middleware.
Hoàn thành (Finishing Up)
Khi route hoặc controller method trả về response, response sẽ đi ngược lại qua middleware của route, cho ứng dụng cơ hội sửa đổi hoặc kiểm tra response đi ra.
Cuối cùng, khi response đi hết qua middleware, method handle của HTTP kernel trả lại response object cho handleRequest của application instance, và method này gọi send trên response. Method send gửi nội dung response đến trình duyệt web. Chúng ta đã hoàn thành hành trình qua toàn bộ vòng đời request Laravel!
Tập trung vào Service Providers (Focus on Service Providers)
Service providers thực sự là chìa khóa để bootstrap ứng dụng Laravel. Application instance được tạo, service providers được đăng ký, và request được chuyển đến ứng dụng đã bootstrapped. Thật sự đơn giản như vậy!
Nắm vững cách ứng dụng Laravel được xây dựng và bootstrap qua service providers rất có giá trị. Các service providers do người dùng định nghĩa được lưu trong thư mục app/Providers.
Mặc định, AppServiceProvider khá trống. Provider này là nơi tuyệt vời để thêm các bootstrapping và service container bindings riêng. Với ứng dụng lớn, bạn có thể tạo nhiều service providers, mỗi cái có bootstrapping chi tiết hơn cho các services cụ thể.