如何在 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