如何在 Laravel 5 中的路由中向中间件添加多个项目
How to Add More than One Item to Middleware on Route in Laravel 5
我最近开始使用 Laravel 5,但我在实现一个不仅要授权用户,还要检查权限的系统时遇到了很多麻烦。
在我在网上找到的所有示例中,我看到有两个项目被用作中间件。例如:
Route::group(['middleware' => ['auth', 'permissions']], function() {
// protected routes here
Route::get('admin', 'DashboardController@index');
});
但是,无论我做什么,我都无法让它工作。我只能申请一个项目作为中间件,比如:
Route::group(['middleware' => 'auth'], function() {
// protected routes here
Route::get('admin', 'DashboardController@index');
});
如果我应用两个,我会得到错误 "Route [admin] not defined."
我能想到的都试过了,就是碰壁了。到底如何才能将两个或多个中间件应用到一个路由?
您可能只是尝试创建一个中间件,而不是验证?
在你的 Kernel.php 中你可能有类似的东西:
protected $routeMiddleware = [
'auth' => 'Your\Route\Authenticate',
'auth.permissions' => 'Your\Route\AuthenticateWithPermissions'
'permissions' => 'Your\Route\RedirectIfNoPermissions'
]
你可以使用这个 class。
在我的情况下,例如您的情况,您需要为您的组设置角色类型权限:
Route::group(['middleware' => ['auth', 'permissions'], 'permissions' =>['Admin','Other']], function(){
//Your Routes
}
我认为你在括号中有错误。您的代码应如下所示:
Route::group(['middleware' => ['auth', 'permissions'], function() {
// protected routes here
Route::get('admin', 'DashboardController@index');
}]);
检查右括号...
我正在回答我自己的问题,因为很多人错过了提到解决方案的评论。
如 lukasgeiter 的评论中所述,问题出在权限中间件中。
在我的回复中看到,答案是在权限中间件中找到的,where where using:
return redirect()->route('admin');
而不是:
redirect('admin');
我的 routes.php 文件中的代码实际上没有任何问题。
此错误路由[admin]未定义是因为路由名称admin未定义。
路由名称和路由路径是两个不同的东西。
并且您已将路由路径声明为管理员,
Route::get('admin', 'DashboardController@index');
然而,
return redirect()->route('admin');
表示您正在将流重定向到名为 admin 的路由。
对错误进行排序,
定义一个路由名称admin 在下面定义的数组中如下
'as' => 'route_name'
.
解决方案:
Route::get('admin', [
'as' => 'admin',
'uses' => 'DashboardController@index'
]);
请参考 link : https://laravel.com/docs/master/routing#named-routes
我最近开始使用 Laravel 5,但我在实现一个不仅要授权用户,还要检查权限的系统时遇到了很多麻烦。
在我在网上找到的所有示例中,我看到有两个项目被用作中间件。例如:
Route::group(['middleware' => ['auth', 'permissions']], function() {
// protected routes here
Route::get('admin', 'DashboardController@index');
});
但是,无论我做什么,我都无法让它工作。我只能申请一个项目作为中间件,比如:
Route::group(['middleware' => 'auth'], function() {
// protected routes here
Route::get('admin', 'DashboardController@index');
});
如果我应用两个,我会得到错误 "Route [admin] not defined."
我能想到的都试过了,就是碰壁了。到底如何才能将两个或多个中间件应用到一个路由?
您可能只是尝试创建一个中间件,而不是验证?
在你的 Kernel.php 中你可能有类似的东西:
protected $routeMiddleware = [
'auth' => 'Your\Route\Authenticate',
'auth.permissions' => 'Your\Route\AuthenticateWithPermissions'
'permissions' => 'Your\Route\RedirectIfNoPermissions'
]
你可以使用这个 class。
在我的情况下,例如您的情况,您需要为您的组设置角色类型权限:
Route::group(['middleware' => ['auth', 'permissions'], 'permissions' =>['Admin','Other']], function(){
//Your Routes
}
我认为你在括号中有错误。您的代码应如下所示:
Route::group(['middleware' => ['auth', 'permissions'], function() {
// protected routes here
Route::get('admin', 'DashboardController@index');
}]);
检查右括号...
我正在回答我自己的问题,因为很多人错过了提到解决方案的评论。
如 lukasgeiter 的评论中所述,问题出在权限中间件中。
在我的回复中看到,答案是在权限中间件中找到的,where where using:
return redirect()->route('admin');
而不是:
redirect('admin');
我的 routes.php 文件中的代码实际上没有任何问题。
此错误路由[admin]未定义是因为路由名称admin未定义。
路由名称和路由路径是两个不同的东西。
并且您已将路由路径声明为管理员,
Route::get('admin', 'DashboardController@index');
然而,
return redirect()->route('admin');
表示您正在将流重定向到名为 admin 的路由。
对错误进行排序,
定义一个路由名称admin 在下面定义的数组中如下
'as' => 'route_name'
.
解决方案:
Route::get('admin', [
'as' => 'admin',
'uses' => 'DashboardController@index'
]);
请参考 link : https://laravel.com/docs/master/routing#named-routes