2014-09-19 59 views
0

我有一个控制器,通过Route::controller()进行路由。将表单重定向回到Laravel的上一页之后

我有getEditpostEdit函数。我在不同位置链接到getEdit-功能,并希望用户在表单中进行更改并提交之后将其重定向到该位置。

在成功保存到数据库后,我使用了Redirect::back()方法,但不幸的是我没有重定向到请求的页面之前getEdit但取而代之的是返回getEdit

我有可能改变这种行为吗?

+0

如何将编辑前的URL传递给控制器​​作为参数? – 2014-09-19 08:47:39

+0

也是这样想的。但它必须是查询字符串(比如'/ edit/11?back = route/to/action')才能工作,对吗? – Tim 2014-09-19 08:50:52

+0

我看到了,等待编辑 – 2014-09-19 08:54:50

回答

6

经过搜索和尝试,我想出了一个解决方案,似乎是完美的我的方案,似乎也很干净。

我只需在我的getEdit函数中将会话密钥url.intended设置为URL::previous(),而不使用URL参数或任何类型的URL。

Session::put('url.intended', URL::previous()); // using the Facade 
session()->put('url.intended', URL::previous(); // using the L5 helper 

在我的postEdit功能,我只是做了return Redirect::intended('/')

工程就像一个魅力,完全解决了我的问题。

+0

+1好的一个!尽可能简单。 – 2014-09-19 10:48:45

+0

Typo(用t替换t)让我有一分钟应该是'Session :: put('url.intended',URL :: previous()); ' – 2016-04-01 14:01:51

+0

如果表单中存在任何验证错误,该怎么办?用户将被重定向到同一页面,同一页面被存储在会话中。还试图编辑答案添加缺少的右括号,但显然编辑必须至少有6个字符! – Ehsan 2017-10-01 11:51:34

0

添加使用Laravel 5蒂姆回答一个例子:

在有一个编辑表格的控制器方法:

Session::put('requestReferrer', URL::previous()); 

这将保存前一页面的链接到编辑网址形式为会议变种requestReferrer

为了使您的更新方法重定向到这个变量:

return redirect(Session::get('requestReferrer')); 

我假设,如果不止一种形式是开放的一次用户,这可能不会产生预期的行为。如果有人提出更好的修订,我会编辑这篇文章以包含它。

+0

感谢您的回答,但除了我的回答之外,我看不到相关性?在你的解决方案中(也不是特定于L5的),你也不能使用意向重定向。如果会话不存在会怎么样?你会得到一个错误。 – Tim 2015-10-19 06:44:42

+0

我的歉意,我没有意识到url.intended是为reserved()方法保留的。我的意图是要澄清你给出的例子是在做什么,通过尝试这样做暴露了你的例子实际上在做什么!我看到意图有一个回退机制。我会稍微删除这个答案。会话必须处于活动状态才能工作是吗? – thatnetworkguy 2015-10-20 16:25:32

+0

我现在看到我最初的执行失误,我错过了在'Facpected'> Facade中使用的拼写错误。< – thatnetworkguy 2015-10-20 18:08:09

相关问题