如何在Laravel 5中为路径中的中间件添加多个项目

时间:2015-03-05 18:27:45

标签: laravel-5 laravel-routing

我最近开始使用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');
});

如果我申请两个,我收到错误“路由[管理员]未定义。”

我已经尝试了所有我能想到的东西,而且我正撞在一堵砖墙上。我怎么能在一条路线上应用两件或两件以上的中间件呢?

5 个答案:

答案 0 :(得分:1)

您可能会尝试创建一个比验证更多的中间件吗?

在你的Kernel.php中你可能有类似的东西:

protected $routeMiddleware = [
    'auth' => 'Your\Route\Authenticate',
    'auth.permissions' => 'Your\Route\AuthenticateWithPermissions'
    'permissions' => 'Your\Route\RedirectIfNoPermissions'
]

答案 1 :(得分:1)

我认为括号中有错误。您的代码应如下所示:

Route::group(['middleware' => ['auth', 'permissions'], function() {
     // protected routes here
     Route::get('admin', 'DashboardController@index');
}]);

检查结束括号......

答案 2 :(得分:1)

我正在回答我自己的问题,因为许多人都错过了提到解决方案的评论。

问题出现在权限中间件中,正如lukasgeiter发表的评论所述。

正如我的回复中所见,答案是在权限中间件中找到的,其中使用了:

return redirect()->route('admin'); 

而不是:

redirect('admin'); 

我的routes.php文件中的代码实际上没有任何问题。

答案 3 :(得分:1)

此错误路由[admin]未定义是因为未定义路径名称 admin

路线名称和路线路径是两回事。

您已将路径路径声明为admin,

Route::get('admin', 'DashboardController@index');

然而,

return redirect()->route('admin'); 

表示您将流重定向到名为 admin 的路径。

要对错误进行排序,

在下面定义的数组中使用以下内容定义路径名称 admin 'as' => 'route_name'

解决方案:

Route::get('admin', [
   'as' => 'admin',
   'uses' => 'DashboardController@index'
]);

请参阅链接:https://laravel.com/docs/master/routing#named-routes

答案 4 :(得分:0)

您可以使用此class

就我而言,您需要为您的群组设置角色类型权限:

Route::group(['middleware' => ['auth', 'permissions'], 'permissions' =>['Admin','Other']], function(){
   //Your Routes
}