Bir rotadan birden fazla middleware tanımlamak için:
// Grup olarak
Route::group(['middleware' => ['admin','diger','baskabirmiddleware']], function () {
// ...
});
// Tek bir rotaya da resource için
Route::resource('users','UserController')->middleware('admin','diger','baskabirmiddleware');
Route::get('/')->uses('SomeController@index')->middleware('admin','diger','baskabirmiddleware');
// Controller içerisinde, __construct yöntemi içerisinde
public function __construct()
{
$this->middleware(['admin','diger','baskabirmiddleware']);
// ya da
// $this->middleware('admin');
// $this->middleware('diger');
// gibi ayrı ayrı da olabilir.
}
Ayrıca middleware parametrelerine bakarsanız:
https://laravel.com/docs/5.5/middleware#middleware-parameters
Parametre de kullanarak belli şartlara göre işlem yaptırabilirsiniz. Örneğin
// \App\Http\Middleware\Role::handle()
public function handle($request, Closure $next, ...$role)
{
// Burada virgül ile ayrılmış $role değerler splat operatörü sayesinde içeri array olarak aktarılıyor
// hasRole yönteminin de array kabul ettiğini varsayalım
if (! $request->user()->hasRole($role)) {
// İşlemler...
}
foreach($roles as $role) {
switch ($role) {
case 'admin':
// ...
break;
}
// ya da if else vs
}
return $next($request);
}
// Bunu da rotada kullanırken
Route::group(['middleware' => ['auth','role:admin,accountant,moderator']], function () {
// ...
});
Route::group(['middleware' => ['auth','role:admin,sales,observer']], function () {
// ...
});
Route::resource('users','UserController')->middleware('auth','role:admin,moderator,editor,observer','baskabirmiddleware');
Birden fazla middleware için "inanılmaz bir yük bindiriyor" demişsiniz. Bu yükün sebebi nedir? Onu da middleware içerisinde bence önbellekleme ile çözebilirsiniz.