Middleware cung cấp một cơ chế thuận tiện để lọc các yêu cầu HTTP gửi đến ứng dụng bạn. Nó là một lớp trung gian nằm giữa request và controller. Bạn có thể thêm các xử lý logic trước khi gửi đến controler.
Một số trường hợp sử dụng:
+ Chẳng hạn như bạn muốn kiểm tra xem người dùng có đăng nhập hay chưa, để chuyển họ đến những trang thích hợp.
+ Phân biệt đâu là khu vực của quản trị viên, đâu là khu vực người dùng
+ ....
Sau đây, tôi sẽ hướng dẫn các tạo một middleware kiểm tra người dùng có đăng nhập có phải là quản trị viên hay không.
Đầu tiên, bạn chạy lệnh sau để tạo mới một middleware
php artisan make:middleware IsAdmin
Sau khi lệnh comamd trên chạy xong, nó sẽ tạo ra một file IsAdmin.php nằm trong thư mục app/Http/Middleware
Tiếp theo các bạn hay chỉnh sửa file IsAdmin.php giống như bên dưới
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Cookie;
class IsAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::guard('admin')->check()) {
$referer_url = \Request::server('HTTP_REFERER');
session()->put('referer_url', $referer_url);
return $next($request);
}
Auth::logout();
return redirect()->route('admin.login');
}
}
Bây giờ bạn muốn gắn middleware trên vào một số route nhất định.
Giả sử, bạn có một số route chỉ cung cấp cho quản trị viên sử dụng và muốn gắn middleware vào các route đó để chặn người dùng bình thường truy cập vào. Để làm được điều đó, chúng ta cần đăng kí middleware vào routeMiddleware trong thư mục app/Http/Kernel.php
protected $routeMiddleware = [
'admin' => \App\Http\Middleware\IsAdmin::class,
// other middleware goes here
];
Cuối cùng, chúng ta sẽ gắn middleware vào các route cảu quản trị viên
Route::middleware(['admin'])->group(function () {
// Place all your admin protected routes here ...
});
Tôi hy vọng bạn thích hướng dẫn này. Nếu bạn có bất kỳ câu hỏi nào hãy liên hệ với chúng tôi qua trang contact. Cảm ơn bạn.