Laravel - 如何通过路由组将变量传递给中间件?
Posted
技术标签:
【中文标题】Laravel - 如何通过路由组将变量传递给中间件?【英文标题】:Laravel - How to pass variables to middleware through route group? 【发布时间】:2017-08-07 06:17:06 【问题描述】:这是我的路线组,
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
变量从路由组传递给中间件。
谢谢。
【问题讨论】:
How to pass arguments from router to middleware in laravel 5?的可能重复 【参考方案1】:您可以使用冒号简单地将多个参数传递到中间件。像这样使用它:
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);
这会有所帮助。
编辑:2018 年 12 月 14 日
您还可以将多个变量发送到中间件。您只需要使用逗号 (,) 分隔值。
Route::group(['middleware' => 'checkUserLevel:some_value_of_level, one_more_value_to_send'], function ()
// my routes
);
您将在中间件处理程序中$level
之后的变量中获得值one_more_value_to_send
。
public function handle($request, Closure $next, $level, $another_value)
$user = Auth::user();
if ($user->level > $level)
return redirect('testUrl');
return $next($request);
更多详情可以参考:Passing parameters to Middleware in Laravel 5.1
【讨论】:
@xEterno 是的,您可以通过逗号分隔多个变量。【参考方案2】:在 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 调用 rout
http://local.pms.com:8080/department/add
结果是这样的:
现在您可以在中间件中编码
【讨论】:
以上是关于Laravel - 如何通过路由组将变量传递给中间件?的主要内容,如果未能解决你的问题,请参考以下文章