Get in touch
or send us a question?
CONTACT

Vòng đời request Laravel (Request lifecycle Laravel)

Mô hình vòng đời của một request khi được gửi đến trong Laravel framework

1. Khởi động (Bootstrap)

Khi một request đến ứng dụng Laravel, đầu tiên nó sẽ đi qua file public/index.php. Đây là entry point của ứng dụng.

File: public/index.php

<?php

// Định nghĩa đường dẫn tới root của ứng dụng
define('LARAVEL_START', microtime(true));

// Autoload các file cần thiết
require __DIR__.'/../vendor/autoload.php';

// Khởi động ứng dụng
$app = require_once __DIR__.'/../bootstrap/app.php';

// Xử lý request và trả về response
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

$response->send();

$kernel->terminate($request, $response);

2. Service Providers

Trong quá trình khởi động, Laravel sẽ đăng ký và khởi động các service providers, các dịch vụ cần thiết cho ứng dụng.

File: config/app.php

'providers' => [
    // Các service providers của Laravel
    Illuminate\Auth\AuthServiceProvider::class,
    Illuminate\Broadcasting\BroadcastServiceProvider::class,
    // ...
    
    // Các service providers tùy chỉnh của bạn
    App\Providers\RouteServiceProvider::class,
    // ...
],

3. HTTP Kernel và Middleware

Request sẽ được gửi đến HTTP Kernel, lớp này được định nghĩa trong file app/Http/Kernel.php. Tại đây, request sẽ đi qua các middleware.

File: app/Http/Kernel.php

class Kernel extends HttpKernel
{
    protected $middleware = [
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        // ...
    ];

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            // ...
        ],

        'api' => [
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        // ...
    ];
}

4. Routing và Controller

Sau khi request vượt qua middleware, nó sẽ được định tuyến đến controller thích hợp dựa trên route.

File: routes/web.php

use App\Http\Controllers\HomeController;

Route::get('/', [HomeController::class, 'index']);
Route::get('/about', [HomeController::class, 'about']);

File: app/Http/Controllers/HomeController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
    public function index()
    {
        return view('welcome');
    }

    public function about()
    {
        return view('about');
    }
}

5. View Rendering

Nếu controller trả về một view, Laravel sẽ render view thành HTML.

File: resources/views/welcome.blade.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Welcome</title>
</head>
<body>
    <h1>Welcome to Laravel!</h1>
</body>
</html>

6. Response

Response được gửi lại cho client.

public function index()
{
    return response()->json([
        'message' => 'Hello, World!'
    ]);
}

Trên đây là các bước chi tiết của vòng đời request trong Laravel, từ khi nhận được request, qua các middleware, định tuyến đến controller, và cuối cùng trả về response. Mỗi bước đều có thể được tùy chỉnh theo nhu cầu của ứng dụng, giúp Laravel trở thành một framework mạnh mẽ và linh hoạt.

Tham khảo:
https://viblo.asia/p/tap-5-vong-doi-request-laravel-request-lifecycle-laravel-LzD5dwqOljY
https://laravel.com/docs/11.x/lifecycle