Laravel - 重定向::预期路线不起作用

Won*_*nka 3 routes laravel

我有一个 Laravel 构建的博客,要对帖子发表评论(如果您已注销),您必须登录。我放了一个这样的链接:

<a href="{{ URL::route('login') }}">login</a> to do this.
Run Code Online (Sandbox Code Playgroud)

这将重定向到登录表单,一旦填写并验证用户身份,我有这个:

return Redirect::intended('/');
Run Code Online (Sandbox Code Playgroud)

这会将用户带到主页,而不是他们打算访问的页面,在这种情况下,是他们单击login链接以进行评论的帖子所在的页面。在这种情况下,如何将它们返回到预期的 url?

The*_*pha 5

实际上,Redirect::intended('/')如果会话中有可用的密钥,则工作正常,url.intended否则它会重定向到默认值URL,即您的情况“/”,因此您肯定没有将其URL放入会话中。要做到这一点,您可以URL使用如下方式将 放入会话中:

Session::put('url.intended', 'url...');
Run Code Online (Sandbox Code Playgroud)

因此,可能在登录链接中,您可以添加这样的查询字符串:

<a href="{{ URL::route('login') }}?intended=1">login</a>
Run Code Online (Sandbox Code Playgroud)

因此,您可以跟踪重定向,并在该路由的方法中(在 return 之前View)将前一个URL放入会话中,使用如下所示:

if(Input::get('intended')) {
    Session::put('url.intended', URL::previous());
}
Run Code Online (Sandbox Code Playgroud)

然后在你从那里重定向之前,你应该URL使用这样的东西从会话中删除:

$intendedUrl = Session::get('url.intended', url('/'));
Session::forget('url.intended');
return Redirect::to($intendedUrl);
Run Code Online (Sandbox Code Playgroud)

这应该可以解决问题。此外,您可以查看此答案,可能会有所帮助。