middlewareها یک مکانیسم ساده ای را برای فیلتر کردن درخواست های http ورودی به برنامه تان تدارک می بیند.
به طور مثال لاراول یک middleware (ترجمه فارسیش میشه میان افزار) برای احرازهویت کاربران دارد و در صورتی که کاربری Login نکرده باشد و احراز هویت نشده باشد میان افزار آن را به صفحه لاگین هدایت میکند وگرنه میان افزار به درخواست اجازه ادامه کارش را میدهد.
middleware ها در دایرکتوری app/Http/Middleware قرار میگیرند.
تعریف یک middleware
با تایپ دستور make:middleware در ترمینال می توانیم یک میان افزار جدید ایجاد کنیم. در مثال زیر میان افزار OldMiddleware را ایجاد کردیم.
php artisan make:middleware OldMiddleware
فایل ایجاد شده را باز میکنیم و در متد handle شرط زیر را قرار میدهیم به این صورت که درخواست ورودی به نام age اگر کوچکتر از 200 بود به صفحه home ریدایرکت شود وگرنه به درخواست اجازه ادامه کار بدهد.
<?php namespace App\Http\Middleware;
class OldMiddleware {
public function handle($request, Closure $next){
if ($request->input('age') < 200){
return redirect('home');
}
return $next($request);
}
}
اکنون برای اینکه بخواهیم از این میان افزار استفاده کنیم ابتدا باید آن را در فایل app/Http/Kernel.php ثبت کنیم. اگر می خواهید این میان افزار برای هر درخواست http برنامه تان اجرا شود آن را به آرایه middleware$ اضافه کنید که بعد از این هردرخواستی با این نام را فیلتر خواهد کرد.
اگر می خواهید میان افزار فقط به یک مسیر خاص اعمال شود ابتدا باید آن را به آرایه routeMiddleware$ اضافه کنید به این صورت که کلید آن در آرایه نام خلاصه آن برای استفاده در برنامه به کار می رود:
protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicA uth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
'old' => 'App\Http\Middleware\OldMiddleware',
];
حالا می تونید میان افزار را به هر مسیری در فایل routing.php مانند مثال های زیر اضافه کنید که دوتا میان افزار old و auth را به مسیرهای مورد نظرمان افزودیم :
Route::post('url/create', ['middleware' => 'old', 'uses'=>'UrlController@create']);
Route::get('admin/profile', ['middleware' => 'auth', function() {
//
}]);
Before / After Middleware
همچنین می توانیم میان افزارهای خاصی را ایجاد کنیم که قبل یا بعد از مدیریت درخواست توسط برنامه عملی را اجرا کنند.
برای اطلاعات بیشتر به اینجا مراجعه کنید