Laravel - Redirect ::预定路线不起作用

时间:2014-10-18 23:07:00

标签: laravel routes

我有一个laravel内置博客,并评论帖子(如果你已经注销),你必须登录。我把这样的链接:

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

这会重定向到登录表单,该表单一旦填写完毕并且用户已通过身份验证,我就会这样:

return Redirect::intended('/');

用户访问主页,他们打算使用的页面,在这种情况下,带有他们点击login链接的帖子的页面能够评论。在这种情况下,如何将它们返回到预期的URL?

2 个答案:

答案 0 :(得分:4)

实际上,如果会话中有可用的密钥为Redirect::intended('/'),则url.intended有效,否则会重定向到您的情况下的默认URL&#39; /&#39 ;所以你肯定没有把URL放在会话中。为此,您可以使用以下内容将URL放入会话中:

Session::put('url.intended', 'url...');

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

<a href="{{ URL::route('login') }}?intended=1">login</a>

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

if(Input::get('intended')) {
    Session::put('url.intended', URL::previous());
}

然后,在您从那里重定向之前,您应该使用以下内容从会话中删除URL

$intendedUrl = Session::get('url.intended', url('/'));
Session::forget('url.intended');
return Redirect::to($intendedUrl);

这应该可以解决问题。此外,您可以查看this answer,也可以提供帮助。

答案 1 :(得分:2)

Redirect::intended需要两个部分才能运作。第一种是当用户尝试访问受限页面/orders但他们没有登录时,您通过以下方式将其重定向到登录页面:

redirect()->guest('/login');

然后,如果验证成功,则在您的登录回复后,请致电:

redirect()->intended('/dashboard');