Laravel - Middleware: Cửa ngõ đến Xử lý Yêu cầu

Xin chào các bạn tương lai của các nhà phát triển Laravel! Hôm nay, chúng ta sẽ khám phá thế giới fascinante của Laravel Middleware. Hãy tưởng tượng middleware như một bảo vệ an ninh hữu ích cho ứng dụng của bạn - nó kiểm tra và xử lý các yêu cầu trước khi chúng đến logic chính của ứng dụng. Hãy bắt đầu hành trình thú vị này cùng nhau!

Laravel - Middleware

Middleware là gì?

Trước khi chúng ta nhảy vào mã, hãy hiểu middleware là gì. Hãy tưởng tượng bạn đang tổ chức một buổi tiệc (ứng dụng của bạn), và bạn có một bảo vệ (middleware) ở cửa. Bảo vệ này có thể:

  1. Kiểm tra xem người đó có trong danh sách khách không (xác thực)
  2. Đảm bảo họ ăn mặc phù hợp (validiation)
  3. Cung cấp cho họ một vòng tay (thêm thông tin vào yêu cầu)
  4. Hoặc thậm chí từ chối họ (kết thúc yêu cầu)

Đó chính là điều middleware làm cho ứng dụng Laravel của bạn!

Đăng ký Middleware

Bây giờ, hãy xem cách chúng ta có thể tạo và đăng ký middleware của riêng mình.

Tạo Middleware

Đầu tiên, chúng ta sẽ tạo một middleware đơn giản để kiểm tra xem người dùng có trên 18 tuổi hay không:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age <= 18) {
return redirect('home');
}

return $next($request);
}
}

Trong ví dụ này, middleware CheckAge của chúng ta kiểm tra xem tham số age trong yêu cầu có trên 18 tuổi hay không. Nếu không, nó sẽ chuyển hướng đến trang chủ. Ngược lại, nó sẽ chuyển yêu cầu sang middleware tiếp theo hoặc đến ứng dụng chính.

Đăng ký Middleware Toàn cục

Để sử dụng middleware này toàn cục (cho tất cả các route), chúng ta cần đăng ký nó trong file app/Http/Kernel.php:

protected $middleware = [
// ...
\App\Http\Middleware\CheckAge::class,
];

Đăng ký Middleware Route

Nếu bạn muốn sử dụng middleware chỉ cho các route cụ thể, bạn có thể đăng ký nó như một route middleware:

protected $routeMiddleware = [
// ...
'checkage' => \App\Http\Middleware\CheckAge::class,
];

Sau đó, bạn có thể sử dụng nó trong route của mình như sau:

Route::get('adult-only', function () {
//
})->middleware('checkage');

Tham số Middleware

Đôi khi, chúng ta muốn middleware của mình linh hoạt hơn. Đó là lúc các tham số middleware trở nên hữu ích!

Hãy thay đổi middleware CheckAge của chúng ta để chấp nhận tham số tuổi tối thiểu:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
public function handle($request, Closure $next, $minAge)
{
if ($request->age <= $minAge) {
return redirect('home');
}

return $next($request);
}
}

Bây giờ, chúng ta có thể sử dụng middleware này với các giới hạn tuổi khác nhau:

Route::get('adult-only', function () {
//
})->middleware('checkage:18');

Route::get('senior-only', function () {
//
})->middleware('checkage:65');

Đó có phải là tuyệt vời không? Chúng ta đã làm cho middleware của mình có thể tái sử dụng cho các tình huống khác nhau!

Middleware Kết thúc

Đôi khi, chúng ta muốn middleware của mình làm điều gì đó sau khi phản hồi đã được gửi đến trình duyệt. Đó là lúc middleware kết thúc xuất hiện!

Hãy tạo một middleware ghi lại thời gian phản hồi:

<?php

namespace App\Http\Middleware;

use Closure;

class LogResponseTime
{
public function handle($request, Closure $next)
{
$request->start_time = microtime(true);

return $next($request);
}

public function terminate($request, $response)
{
$duration = microtime(true) - $request->start_time;
\Log::info('Response time: ' . $duration . ' seconds');
}
}

Middleware này thêm start_time vào yêu cầu, sau đó ghi lại tổng thời gian phản hồi sau khi phản hồi đã được gửi.

Để sử dụng middleware kết thúc, hãy chắc chắn rằng nó được đăng ký trong file app/Http/Kernel.php:

protected $middleware = [
// ...
\App\Http\Middleware\LogResponseTime::class,
];

Phương thức Middleware

Dưới đây là bảng các phương thức chính bạn sẽ sử dụng khi làm việc với middleware:

Phương thức Mô tả
handle() Phương thức chính của middleware. Xử lý yêu cầu và tùy chọn chuyển nó sang middleware tiếp theo.
terminate() Chạy sau khi phản hồi đã được gửi đến trình duyệt. Được sử dụng cho việc dọn dẹp hoặc ghi lại.

Kết luận

Và thế là bạn đã có, các bạn! Chúng ta đã cùng nhau hành trình qua vùng đất của Laravel Middleware, từ việc tạo và đăng ký middleware đến việc sử dụng tham số và middleware kết thúc. Nhớ rằng, middleware như một cây đa-purpose của xử lý yêu cầu - nó linh hoạt, mạnh mẽ và là một công cụ cần thiết trong bộ công cụ Laravel của bạn.

Khi bạn tiếp tục hành trình Laravel của mình, bạn sẽ tìm thấy rất nhiều cách sáng tạo để sử dụng middleware. Có lẽ bạn sẽ tạo middleware để kiểm tra chế độ bảo trì, ghi lại yêu cầu, hoặc thậm chí biến đổi dữ liệu yêu cầu. Các khả năng là vô tận!

Tiếp tục mã hóa, tiếp tục học hỏi, và quan trọng nhất, hãy vui vẻ! Đến gặp lại lần sau, chúc các bạn may mắn với Laravel!

Credits: Image by storyset