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
همچنین Ù…ÛŒ توانیم میان Ø§ÙØ²Ø§Ø±Ù‡Ø§ÛŒ خاصی را ایجاد کنیم Ú©Ù‡ قبل یا بعد از مدیریت درخواست توسط برنامه عملی را اجرا کنند.
برای اطلاعات بیشتر به اینجا مراجعه کنید