这是我的路线组,
Route::group(['middleware' => 'checkUserLevel'], function () {
// my routes
});
这是我的中间件 checkUserLevel ,
public function handle($request, Closure $next, $level)
{
$user = Auth::user();
if ($user->level > $level) {
return redirect('testUrl');
}
return $next($request);
}
我想将$level
变量传递给路由组中的中间件。
感谢。
答案 0 :(得分:11)
您可以使用冒号将多个参数传递到中间件。使用它像:
Route::group(['middleware' => 'checkUserLevel:some_value_of_level'], function () {
// my routes
});
现在,您可以在$ level变量中包含此值。
public function handle($request, Closure $next, $level)
{
$user = Auth::user();
if ($user->level > $level) {
return redirect('testUrl');
}
return $next($request);
}
这会有所帮助。
您还可以向中间件发送多个变量。您只需要使用逗号(,)分隔值。
Route::group(['middleware' => 'checkUserLevel:some_value_of_level, one_more_value_to_send'], function () {
// my routes
});
您将在中间件处理程序中的one_more_value_to_send
之后的变量中获得值$level
。
public function handle($request, Closure $next, $level, $another_value)
{
$user = Auth::user();
if ($user->level > $level) {
return redirect('testUrl');
}
return $next($request);
}
答案 1 :(得分:1)
在Laravel 6.x中,您必须执行此操作 在中间件中添加代码
public function handle($request, Closure $next,$module=null,$right=null)
{
dd($module,$right);
return $next($request);
}
您的路线代码
Route::get('/department/add', 'DepartmentController@addNew')->middleware('ManualSec:abc,xyz');
在Kernel.php中,在$ routeMiddleware部分中注册您的中间件,例如
'ManualSec' => \App\Http\Middleware\ManualSec::class,
在我的情况下通过使用url呼叫溃败
http://local.pms.com:8080/department/add
结果将是这样的:
现在您可以在中间件中进行编码