Xin chào các bạn, tiếp tục series Laravel Architecture, hôm nay mình giới thiệu đến các bạn một Architecture trong Laravel mà hầu hết các bạn đều thấy rất quen thuộc, đó chính là Request Lifecycle. Request Lifecycle này không chỉ có Laravel mới có, mà hầu hết các framework về web đều có thuật ngữ này, từ các framework của Php như: Laravel, Cakephp, Zend, Yii, ... đến các framework của Js như: Reactjs, Vuejs, ... đến các framework của Python như: django, flask, .... Bởi vì các framework web này mục đích chính là làm việc với http protocal, xử lý các request và trả về response cho client. Trong Laravel thì Request Lifecycle sẽ được xử lý như thế nào, mời các bạn cùng quan sát sơ đồ xử lý sau:
I. Giải thích sơ bộ
Nào ta hãy giải thích qua về sơ đồ trên nhé
1. User/Client là tác nhân gửi request
Có thể là từ trình duyệt, từ postman, từ 1 ctrinh call api, ...
2. Public/index.php
Đây là file khởi động ứng dụng laravel Bootstrap/autoload.php: Tự động tạo các class loader danh cho ứng dụng Bootstrap/app.php: khởi động ứng dụng
3. App/http/kernel.php:
Trung tâm xử lý request
4. Service Providers
Http kernel sẽ load Service Providers
5. Router
Request được gửi đến Router xử lý.
6. Middleware
7. Controller
Request sẽ được chuyển đến controller để lý nghiệp vụ
8. View
Render ra view và trả lại cho User/Client
II. Giải thích chi tiết
1. User/Client là tác nhân gửi request
Có thể là từ trình duyệt, từ postman, từ 1 ctrinh call api, ...
2. Public/index.php
Vị trí trong code: public/index.php Nào mình cùng xem code của file index.php này Bắt đầu bằng
require __DIR__.'/../vendor/autoload.php';
Đầu tiên sẽ include file composer autoload Tiếp theo
$app = require_once __DIR__.'/../bootstrap/app.php';
Sẽ khởi động laravel và tạo ra một application laravel instance.
3. App/http/kernel.php
Vị trí trong code: Illuminate\Contracts\Http\Kernel ( nằm trong core của Laravel) Application laravel instance được tạo ở bước 2 sẽ nhận request đến và được xử lý bởi Http/Kernel. Ở đây sẽ load những config file, nhận biết môi trường, và quan trọng nhất là load service providers
4. Service Providers
Vị trí trong code: khai báo trong file config/app.php Là nơi khai báo các service providers được dùng. Khi chạy làm 2 nhiệm vụ
4.1 Đăng ký service provider (Register service provider)
4.2 Khởi động service provider (Bootstrap service provider)
Khi bạn vào file config/app.php bạn sẽ thấy phần 'providers' khai báo các Service quan trọng của Laravel như: AuthServiceProvider, BroadcastServiceProvider, BusServiceProvider, ... Đây là những service provider này lại khởi động những service chính của laravel như: App, Cache, DB, Crypt
5. Router
Vị trí trong code: routes/web.php, routes/api.php, ...
Route::get( 'profile/{id}', [UserProfileController::class, 'show']
)->name('top2')->where('id', '[0-9]+')->middleware('auth');
Router quy định
- các quy tắc cho router: format profile/{id}, id in 0~9
- nơi xử lý: UserProfileController@show
- nằm trong middeware('auth') hay group nào
6. Middleware
Tạo ra các bộ quy tắc mục đích để lọc các request.
7. Controller
Request sẽ được chuyển đến controller để lý nghiệp vụ
8. View
Render ra view và trả lại cho User/Client