Trong bài viết này mình sẽ hướng dẫn cách tạo middleware trong laravel và middleware hoạt động thế nào, qua ví dụ cụ thể sau.
1.Cú pháp lệnh tạo Middleware là IsAdmin:
php artisan make:middleware IsAdmin
2.Thêm code file middleware
Sau khi dùng command tạo file middleware, bạn mở file thêm code handle, nếu user truy cập là admin thì có thể đi qua route.
<?php namespace App\Http\Middleware; use Closure; class IsAdmin { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if ( auth()->user()->type == 'admin') { return $next($request); } return redirect('home')->with('error',"You don't have admin access"); } }
Lưu ý , ở table Users bạn đã thêm file là type,
3. Add middleware vào Kernel.php
Truy cập file app/Http/Kernel.php
Thêm code đăng ký middleware như sau:
‘is_admin’ => \App\Http\Middleware\IsAdmin::class,
protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'is_admin' => \App\Http\Middleware\IsAdmin::class, ];
Tới đây việc tạo middleware đã hoàn thành, bạn có thể middleware ở route hay controller bất kỳ ,nếu dùng route bạn có thể dùng theo cú pháp sau:
Route::get('admin/home', 'HomeController@adminHome')->name('admin.home')->middleware('is_admin');
Nếu dùng ở controller , có thể theo cú pháp,
public function __construct() { $this->middleware(['auth','is_admin']); }