Introduction
Khi bạn sử dụng tools trong “thế giới thực”, bạn sẽ cảm thấy tự tin hơn nếu bạn hiểu cách mà tool đó hoạt động. Trong các ứng dụng phần mềm cũng vậy, khi bạn hiểu về chắc chức năng phần mềm của mình, bạn sẽ cảm thấy thoải mái và tự tin khi sử dụng chúng.
Mục tiêu của tài liệu này là giúp bạn có được kiến thức (high-level) tổng quan tốt về cách mà Laravel framework làm việc. Bằng cách tìm hiểu tổng quan về framework, mọi thứ có vẻ sẽ bớt “ảo diệu” hơn và bạn sẽ trở nên tự tin khi xây dựng ứng dụng của mình. Nếu bạn không hiểu tất cả các điểu khoản ngay lập tức, đừng vội đầu hàng (don’t lose heart!). Hãy thử tìm hiểu từng khái niêm cơ bản trước và xem cách chúng hoạt động, và kiến thức của bạn sẽ tăng dần lên khi bạn khám phá các phần khác của tài liệu.
Lifecycle Overview
First Things
Bắt đầu của tất cả các requests tới ứng dụng Laravel là file public/index.php
, tất cả các requests được điều hướng tới file này bằng cấu hình web server (Apache / Nginx). File index.php
không chứa quá nhiều code. Thay vào đó nó là điểm bắt đầu để tải các phần của framework.
File index.php
tải the Composer generated autoloader definition
, và sau đó trả về một instance của ứng dụng Laravel từ đoạn mã trong bootstrap/app.php
. Action đầu tiên tạo bởi Laravel là tạo ra một instance của ứng dụng / service container.
HTTP / Console Kernels
Tiếp theo, request sẽ được gửi tới HTTP kernel hoặc Console kernel, tùy thuộc vào loại request mà ứng dụng nhận được. 2 kernel này là trung tâm mà tất cả các request sẽ flow theo. Bây giờ, chúng ta sẽ tập trung vào HTTP kernel, được đặt trong app/Http/Kernel
.
HTTP kernel kế thừa từ lớp Illuminate\Foundation\Http\Kernel
, lớp này định nghĩa mảng bootstrappers
sẽ chạy trước khi request được thực thi. Mảng bootstrappers này sẽ quản lý cấu hình lỗi, cấu hình logging, nhận diện môi trường của ứng dụng và thực thi các nhiệm vụ cần thiết phải hoàn thành trước khi request thực sự được thực thi.
HTTP kernel cũng định nghĩa một danh sách HTTP middleware mà tất cả các request sẽ phải chạy qua trước khi được quản lý bởi ứng dụng. Middleware này quản lý việc đọc và ghi HTTP session, xác định xem ứng dụng đang ở trạng thái bảo trì, xác thực CSRF token và rất nhiều tính năng khác.
Việc điều khiển của HTTP kernel rất đơn giản: nhận một Request
và trả về một Response
. Bạn có thể hiểu Kernel giống như một hộp đen lớn sẽ đại diện cho toàn bộ ứng dụng của bạn, nhận các HTTP Request và trả về các HTTP Response.
Service Providers
Một trong những actions quan trọng nhất của Kernel bootstrapping là loading service providers cho ứng dụng của bạn. Tất cả service providers cho ứng dụng được cấu hình trong file config/app.php
. Đầu tiên, phương thức register sẽ được gọi trong tất cả các providers, sau đó, tất cả các providers sẽ được đăng ký (registered), lúc này phương thức boot
sẽ được gọi.
Service providers sẽ chịu trách nhiệm khởi động tất cả các components khác nhau của framework, ví dụ như là database, queue, validation và routing. Kể từ khi chúng thực hiện khởi động và cấu hình tất cả tính năng được cung cấp bởi framework, service providers là phần quan trọng nhất của tiến trình thực thi Laravel.
Dispatch Request
Khi ứng dụng được khởi động và tất cả các service providers được đăng ký (registered), Request
sẽ được chuyển đến bộ định tuyến (router) để gửi đi. Router sẽ gửi request tới một route hoặc một controller, cũng giống như chạy bất kì route đặc biệt nào trong middleware.
Focus On Service Providers
Service providers thật sự rất quan trọng trong việc khởi chạy ứng dụng Laravel. Khi một instance của ứng dụng được tạo, service providers sẽ được registered, và request sẽ được đưa đến (handed) ứng dụng bootstrapped. Nó thực sự rất đơn giản!
Nắm vững về cách một ứng dụng Laravel được xây dựng và khởi chạy thông qua service providers là rất quan trọng. Service providers mặc định trong ứng dụng của bạn được lưu trữ ở thư mục app/Providers
Mặc định, AppServiceProvider
là rỗng. Provider này là nơi tốt nhất để thêm các đoạn mã khởi chạy cho ứng dụng của bạn và service container bindings. Tuy nhiên, với các ứng dụng lớn, bạn có thể tạo một vài service providers cho các mục đích khởi chạy khác nhau.
Tóm tắt
1. Tất cả các request gọi tới ứng dụng laravel đều chạy qua file public/index.php
. File này load các phần của framework và tạo một instance của ứng dụng laravel.
2. Request sẽ chạy qua HTTP kernel
hoặc Console kernel
, HTTP kernel định nghĩa mảng Bootstrapper
và HTTP middleware
quản lý các cấu hình trước khi request được xử lý bởi ứng dụng.
3. Service providers
sẽ chịu trách nhiệm khởi động tất cả các components khác nhau của framework.
4. Khi service providers được registered, request sẽ được gửi tới các route.