2016-12-07 151 views
1

我有一个通过登录检查中间件,有多少游戏有用户,如果用户有多个游戏,我想显示另一个视图,但如果用户有多个游戏,我每次都会重定向错误:Laravel在中间件内部重定向?

这是万一$assigned_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; 
} 

我也试过只return route('games.board')但它不工作。

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

+0

你什么错误? –

+0

@AlexeyMezenin“重新定向了太多次。” – nowilius

+0

代码是正确的,但请确保路由games.board不使用此中间件,因为如果games.board路由使用该中间件它将进入重定向循环,因此您重定向的路由不应再次重定向。 –

回答

2

如果两个路线是内部的中间件,那么你应该检查当前的路线,如果它一样要重定向你不应该重定向到避免重定向循环

$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); 
} 
+0

它的工作原理,但现在我总是重定向到这个页面,可以通过登录来限制这个请求吗? – nowilius

+0

在路由中的这个中间件之前添加auth中间件。所以前例。 Route :: group(['middleware'=> ['auth','yourmiddleware']],function(){}); 然后它只会在登录后才会进入您的中间件。 –