How to Add More than One Item to Middleware on Route in Lara



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

如果我应用两个,我会得到错误"路由[admin]未定义。"

我已经试过了我能想到的一切,我的头撞到了砖墙上。究竟如何将两个或多个中间件项目应用于一条路由?

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

路由名称和路由路径是两个不同的东西。

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

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

然而,

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

意味着您正在将流重定向到名为admin的路由。

要对错误进行排序,

在下面定义的数组中定义路由名称admin,如下所示CCD_ 1。

解决方案:

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

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

您可能只需要尝试创建一个中间件,而不仅仅是验证?

在你的Kernel.php中,你可能有这样的东西:

protected $routeMiddleware = [
    'auth' => 'YourRouteAuthenticate',
    'auth.permissions' => 'YourRouteAuthenticateWithPermissions'
    'permissions' => 'YourRouteRedirectIfNoPermissions'
]

我认为括号中有错误。你的代码应该看起来像:

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

检查闭合支架。。。

您可以使用这个类。

在我的情况下,比如你的情况,你需要为你的组设置角色类型权限:

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

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

这个问题出现在Permissions中间件中,正如lukasgeiter的评论中提到的那样。

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

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

而不是:

redirect('admin'); 

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

最新更新