Cách thêm và đăng ký Middleware trong Laravel 11
Middleware là một thành phần thiết yếu trong các ứng dụng Laravel, cho phép bạn lọc các yêu cầu HTTP nhập vào ứng dụng của mình. Cho dù bạn cần xác thực người dùng, ghi nhật ký yêu cầu hay thực thi các điều kiện cụ thể, middleware cung cấp một cách linh hoạt để xử lý các tác vụ này. Trong hướng dẫn này, chúng tôi sẽ hướng dẫn bạn quy trình tạo và đăng ký middleware trong Laravel 11, cùng với các ví dụ thực tế.
Bước 1: Tạo Middleware
Tạo file middleware bằng cách sử dụng câu lệnh có sẳn trong laravel
mở terminal.
chạy câu lệnh sau:
php artisan make:middleware AdminMiddleware
Câu lệnh này sẽ tạo file app/Http/Middleware/AdminMiddleware.php
.
Bước 2: Định nghĩa Middleware Logic
Tiếp tục mở file đó và thêm nội dung sau
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class AdminMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if (!auth()->check() || !auth()->user()->isAdmin()) {
return redirect('/login');
}
return $next($request);
}
}
Trong ví dụ này, AdminMiddleware
sẽ kiểm tra người dùng đăng nhập chưa, nếu chưa đăng nhập thì chuyển trang về trang đăng nhập
Bước 3: Đăng ký Middleware
Trong laravel 11, đăng ký middleware ở bootstrap/app.php
file. .
MỞ bootstrap/app.php
.
Đăng ký middleware bằng câu lệnh sau:
$app->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'admin' => \App\Http\Middleware\AdminMiddleware::class,
]);
});
Câu lệnh này sẽ đăng ký AdminMiddleware
với alias là admin
.
Bước 4: Ứng dụng Middleware vào Routes
Mở routes/web.php
.
Thêm middleware vào route mà bạn cần:
use App\Http\Controllers\YourController;
Route::get('/admin/dashboard', [YourController::class, 'dashboard'])
->name('admin.dashboard')
->middleware('admin');
Bước 5: Dùng Middleware trong Controller
Nếu dùng trong controller như các phiên bản trước đây, cần thay đổi file Controller.php
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
abstract class Controller extends \Illuminate\Routing\Controller
{
use AuthorizesRequests;
}