Middleware là một trong những tính năng quan trọng của Laravel, nó cho phép bạn thực hiện các xử lý trước khi request được xử lý bởi controller và cũng cho phép bạn thực hiện các xử lý sau khi request được xử lý xong bạn có thể xem thêm về vòng đời của laravel để hiểu rõ hơn về luồng xử lý của middleware. Trong bài viết này, chúng ta sẽ tìm hiểu về Middleware trong Laravel và cách sử dụng chúng để tạo ra các ứng dụng web an toàn và linh hoạt hơn.
1. Khái niệm về Middleware. Middleware là gì?
Middleware là một tầng trung gian giữa request và response. Nó được sử dụng để xử lý các yêu cầu trước khi chúng được xử lý bởi ứng dụng và sau khi chúng được xử lý xong. Middleware là một trong những tính năng quan trọng nhất của Laravel, cho phép bạn kiểm soát tất cả các yêu cầu đến ứng dụng của bạn.
Middleware trong Laravel được sử dụng để thực hiện các xử lý như:
- Kiểm tra quyền truy cập của người dùng
- Xác thực dữ liệu đầu vào
- Kiểm tra dữ liệu đầu vào có hợp lệ hay không
- Thực hiện các xử lý trước và sau khi request được xử lý bởi controller.
Middleware của laravel cho phép bạn kiểm soát các yêu cầu đến trang web của bạn một cách linh hoạt và dễ dàng.
2. Cách tạo Middleware trong Laravel
Để tạo Middleware trong Laravel, bạn có thể sử dụng lệnh make:middleware của Artisan:
php artisan make:middleware CheckAge
Trong đó, CheckAge là tên của Middleware bạn muốn tạo.
Sau khi chạy lệnh trên, Laravel sẽ tạo ra một file Middleware với tên CheckAge.php trong thư mục app/Http/Middleware.
File Middleware mặc định có cấu trúc như sau:
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
}
Hàm handle chính là nơi bạn sẽ viết các xử lý cho Middleware của mình. Hàm này nhận vào hai tham số:
- $request: Đối tượng Illuminate\Http\Request đại diện cho yêu cầu đến ứng dụng.
- $next: Hàm Closure đại diện cho Middleware tiếp theo.
Hàm handle sẽ trả về kết quả của Middleware tiếp theo bằng cách gọi hàm $next và truyền vào $request. Điều này sẽ cho phép request được chuyển tiếp đến Middleware tiếp theo hoặc đến controller nếu không có Middleware nào còn lại.
Trong hàm handle, bạn có thể thực hiện các xử lý để kiểm tra và xử lý yêu cầu đến trước khi nó được chuyển đến controller, controller là gì? Ví dụ, nếu bạn muốn kiểm tra tuổi của người dùng trước khi cho phép họ truy cập vào một trang cụ thể, bạn có thể thêm các xử lý kiểm tra tuổi vào hàm handle.
Ví dụ:
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
public function handle($request, Closure $next)
{
$age = $request->input('age');
if ($age < 18) {
return redirect()->route('home')->with('error', 'Bạn chưa đủ tuổi để truy cập trang này');
}
return $next($request);
}
}
Trong ví dụ trên, Middleware CheckAge kiểm tra tuổi của người dùng. Nếu tuổi nhỏ hơn 18, nó sẽ chuyển hướng người dùng về trang chủ và hiển thị thông báo lỗi.
Sau khi bạn đã viết xong Middleware, bạn cần đăng ký nó với ứng dụng Laravel. Để đăng ký Middleware, bạn có thể thêm nó vào trong mảng $routeMiddleware trong file app/Http/Kernel.php.
Ví dụ:
protected $routeMiddleware = [
'checkAge' => \App\Http\Middleware\CheckAge::class,
];
Trong đó, checkAge là tên Middleware và \App\Http\Middleware\CheckAge::class là đường dẫn đến file Middleware.
Sau khi đã đăng ký Middleware, bạn có thể sử dụng nó trong các Route của ứng dụng bằng cách sử dụng phương thức middleware.
Ví dụ:
Route::get('/dashboard', function () {
//
})->middleware('checkAge');
Trong ví dụ trên, Middleware checkAge được sử dụng để kiểm tra tuổi của người dùng trước khi cho phép truy cập vào trang dashboard.
Ngoài ra, bạn cũng có thể sử dụng Middleware trong các Controller của ứng dụng bằng cách sử dụng phương thức middleware trong hàm __construct.
Ví dụ:
public function __construct()
{
$this->middleware('checkAge');
}
Trong ví dụ trên, Middleware checkAge được sử dụng trong hàm __construct của Controller.
3. Middleware group
Middleware group là một cách để gom nhóm các Middleware lại với nhau. Bằng cách sử dụng Middleware group, bạn có thể áp dụng danh sách các Middleware một cách dễ dàng hơn và nó cũng giúp cho việc quản lý Middleware trong ứng dụng trở nên dễ dàng hơn.
Để tạo ra Middleware group, bạn có thể sử dụng phương thức middlewareGroup trong file app/Http/Kernel.php. Ví dụ:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
Trong đó, web và api là tên của các Middleware group. Middleware web là các Middleware được sử dụng cho các trang web thông thường, trong khi Middleware api là các Middleware được sử dụng cho các API.
Khi sử dụng Middleware group, bạn chỉ cần đăng ký tên của nhóm Middleware trong Route hoặc Controller. Ví dụ:
Route::middleware('web')->group(function () {
Route::get('/', function () {
return view('welcome');
});
});
Trong ví dụ trên, Middleware group được sử dụng để đăng ký Middleware cho Route. Các Middleware được đăng ký trong nhóm web sẽ được áp dụng cho tất cả các Route trong group này.
Tương tự, bạn có thể sử dụng Middleware nhóm trong hàm __construct của Controller. Ví dụ:
public function __construct()
{
$this->middleware('api');
}
trong ví dụ trên, Middleware nhóm api được sử dụng trong hàm __construct của Controller.
Kết luận
Middleware là một tính năng mạnh mẽ của Laravel, cho phép bạn xử lý các yêu cầu đến trước khi nó được chuyển đến controller hoặc sau khi nó được trả về từ controller. Nó cũng cho phép bạn kiểm soát quyền truy cập vào các trang trong website và ứng dụng của bạn và cung cấp cho bạn khả năng tái sử dụng mã của bạn một cách dễ dàng.
Trong bài viết này, chúng ta đã tìm hiểu về Middleware trong laravel là gì? và sử dụng Middleware trong Laravel, bao gồm cách tạo Middleware, đăng ký Middleware với ứng dụng và sử dụng Middleware nhóm. Bằng cách sử dụng Middleware, từ đó giúp bạn có thể tạo ra các ứng dụng Laravel và thiết kế website một cách mạnh mẽ và an toàn hơn.
Tham khảo thêm: