中间件内部的Laravel重定向?

中间件内部的Laravel重定向?,laravel,laravel-5,laravel-routing,laravel-middleware,Laravel,Laravel 5,Laravel Routing,Laravel Middleware,我通过登录进行了中间件检查,用户有多少个游戏,如果用户有多个游戏,我想显示另一个视图,但如果用户有多个游戏,我每次都会收到重定向错误: 这是在$assigned\u games>1的情况下 $games = Auth::user()->userGames; $assigned_games = count($games); if ($assigned_games == 1) { return $next($request); } elseif ($assigned_games &g

我通过登录进行了中间件检查,用户有多少个游戏,如果用户有多个游戏,我想显示另一个视图,但如果用户有多个游戏,我每次都会收到重定向错误:

这是在
$assigned\u games>1的情况下

$games = Auth::user()->userGames;
$assigned_games = count($games);

if ($assigned_games == 1) {
    return $next($request);
} elseif ($assigned_games > 1) {
    return redirect()->route('games.board');
} elseif ($assigned_games < 1) {
    echo "no game bought";
    exit;
}
$games=Auth::user()->userGames;
$assigned_games=计数($games);
如果($assigned_games==1){
返回$next($request);
}elseif($分配的游戏>1){
return redirect()->route('games.board');
}elseif($1){
回声“没有游戏买”;
出口
}
我也只尝试了
返回路线('games.board')
,但不起作用


如何在此处设置正确的重定向?

如果两条路由都在中间件内,则应检查当前路由,如果它与重定向相同,则不应重定向以避免重定向循环

$games = Auth::user()->userGames;
$assigned_games = count($games);

if ($assigned_games == 1) {
    return $next($request);
} elseif ($assigned_games > 1 && \Route::currentRouteName() != 'games.board') {
    return redirect()->route('games.board');
} elseif ($assigned_games < 1) {
    echo "no game bought";
    exit;
} else {
    return $next($request);
}
$games=Auth::user()->userGames;
$assigned_games=计数($games);
如果($assigned_games==1){
返回$next($request);
}elseif($assigned_games>1&&\Route::currentRouteName()!='games.board'){
return redirect()->route('games.board');
}elseif($1){
回声“没有游戏买”;
出口
}否则{
返回$next($request);
}

您遇到了什么错误?@AlexeyMezenin“重定向您的次数太多了。”代码正确,但请确保路由games.board不使用此中间件,因为如果games.board路由使用该中间件,它将进入重定向循环,因此您重定向的路由不应再次重定向。@Sam是的,它在内部,是否可能在那里创建异常?您应该在中间件中抛出异常,因为首先执行中间件,然后执行控制器方法。它可以工作,但现在我总是重定向到此页面,可以仅通过登录限制此请求?在路由中此中间件之前添加验证中间件。例如,Route::group(['middleware'=>['auth','yourmaddleware']],function(){});然后,只有在登录后,它才会进入您的中间件。