【问题标题】:Laravel, same URI, different route name, different middleware causes over loopLaravel,相同的URI,不同的路由名称,不同的中间件导致循环
【发布时间】:2016-07-28 17:15:47
【问题描述】:

在 laravel 中我只是这样做了:

Route::group(["middleware"    =>    "admin"], function() {

    Route::get("/", "UserController@index")->name("user_index");

});


Route::group(["middleware"    =>    "user", "as"    =>    "User::"], function() {

    Route::get("/", "DocumentController@index")->name("user_index");

});

问题是当我以管理员身份验证中间件登录时,当转到“/”时,我的浏览器返回太多重定向并停止。我猜是因为第二条路线正在删除它,因为当我打印出php artisan route:list 时,“/”只有一个结果,并且与用户中间的参数有关,因此它覆盖了前一条路线。

我不明白的是,它为什么会这样做,因为它们都有一个单独的中间件?

这两个中间件都非常简单。下面是我的管理员

public function handle($request, Closure $next)
{

    if ( Auth::check() && Auth::user()->hasRole("customer_service") )
    {
        return $next($request);
    }

    return redirect("/");
}

而我的用户的中间件除了角色不同之外完全一样

【问题讨论】:

  • 为什么都叫user_index
  • 他们不是,管理员是user_index 用户是User::user_index 我试过更改名称,但遇到了同样的问题:(
  • 你解决了吗?我有同样的问题
  • 我做到了。老实说,我有点破解它。我做了一个额外的控制器,它为我做了条件,所以只有一条路线。如果你愿意,我可以找到它吗? @AdRock
  • 那太好了

标签: php laravel-5 routes


【解决方案1】:

这可能是错误的,但这是我为解决上述特定问题所做的。

public function index() {

    return \Auth::user()->hasRole("trainer") ? \App::call("App\Http\Controllers\Trainer\UserController@index")
    : \App::call("App\Http\Controllers\User\UserController@index");
}

【讨论】:

    猜你喜欢
    • 2021-05-29
    • 2020-10-20
    • 2018-06-25
    • 2013-10-09
    • 2018-10-20
    • 2020-02-18
    • 2013-09-24
    • 2016-03-29
    • 1970-01-01
    相关资源
    最近更新 更多