جهت ایجاد یک middleware شخصی در لاراول کافی است ابتدا آن middleware را ایجاد کرده و سپس عملیات مورد نظر را در آن پیاده و پس از رجیستر آن را فراخوانی کنیم.
فرض را بر این میگیریم که قصد داریم یک میدل ور جهت بررسی نقش کاربر یا همان User Role ایجاد کنیم. روش کار به این صورت است.
ابتدا یک میدل ور ایجاد با نام IsAdmin ایجاد میکنم:
php artisan make:middleware IsAdmin
میدل ور در مسیر زیر قرار خواهد گرفت:
App > Http > Middleware
سپس در کلاس ایجاد شده، در متد مربوطه دستورات خود را وارد میکنم که در زیر قابل مشاهده است که من ابتدا بررسی کرد که کاربر ورود کرده است یا خیر و در صورت ورود نقش کاربر را چک کردهام که در صورتی که admin نبود هم میتوانم کاربر را ریدایرکت کنم و هم میتوانم خطای ۴۰۳ که عدم مجوز دسترسی را نشان میدهد، به کاربر نمایش دهم و حتی میتوانم خطای ۴۰۴ را نمایش دهم که برابر با عدم وجود صفحه است که کاملاً به خودم بستگی دارد.
public function handle(Request $request, Closure $next)
{
if(Auth::check()){
if(Auth::user()->role != 'admin'){
return redirect('/');
//abort(403);
}
}
return $next($request);
}
در نهایت نیاز است که میدل ور ایجاد شده را رجیستر کنم، در غیر اینصورت ناچارم هنگام فراخوانی آدرس آن را به صورت کامل صدا بزنم. پس به فایل Kernel.php در لاراول مراجعه میکنیم و در قسمت زیر میدل ور خود را رجیستر میکنم که به صورت key value است و من key را برابر با isadmin تعریف کردهام:
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'isadmin' => \App\Http\Middleware\IsAdmin::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
جهت فراخوانی نیز کافی است در routeهای خود یا در خود کنترلر تلفیقی از میدل ورهای لازم را صدا بزنم که من در اینجا در یک کنترلر با متد construct مدیل ورهای مورد نیازم را صدا زدهام:
public function __construct()
{
$this->middleware(['auth','isadmin']);
}
کار تمام است و شما به همین شیوه میتوانید Middlewareهای دلخواه و مورد نیاز خود را ایجاد و مورد استفاده قرار دهید.