+2

[Laravel Architecture] Request Lifecycle

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

  1. các quy tắc cho router: format profile/{id}, id in 0~9
  2. nơi xử lý: UserProfileController@show
  3. 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


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.