Laravel 在中间件内部重定向?
Posted
技术标签:
【中文标题】Laravel 在中间件内部重定向?【英文标题】:Laravel redirect inside of middleware? 【发布时间】:2017-04-22 10:18:55 【问题描述】:我通过登录有一个中间件检查,用户有多少游戏,如果用户有多个游戏,我想显示另一个视图,但如果用户有多个游戏,我每次重定向错误:
以防万一$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')
,但它不起作用。
如何在此处设置正确的重定向?
【问题讨论】:
你得到什么错误? @AlexeyMezenin“重定向你太多次了。” 代码是正确的,但确保路由 games.board 不使用此中间件,因为如果 games.board 路由使用该中间件,它将进入重定向循环,因此您重定向的路由不应再次重定向. @Sam 是的,它在里面,是否可以在那里创建一个异常? 你应该在中间件中抛出异常,因为中间件是先执行的,然后是控制器方法。 【参考方案1】:如果你的路由都在中间件中,那么你应该检查当前路由,如果它与你重定向的一样,你不应该重定向以避免重定向循环
$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);
【讨论】:
它可以,但是我现在总是重定向到这个页面,是否可以仅通过登录来限制这个请求? 在您的路由中的此中间件之前添加身份验证中间件。所以对于前。 Route::group(['middleware' => ['auth', 'yourmiddleware']], function());然后它只有在登录后才会进入你的中间件。以上是关于Laravel 在中间件内部重定向?的主要内容,如果未能解决你的问题,请参考以下文章