我有一个控制器,通过Route::controller()
进行路由。将表单重定向回到Laravel的上一页之后
我有getEdit
和postEdit
函数。我在不同位置链接到getEdit
-功能,并希望用户在表单中进行更改并提交之后将其重定向到该位置。
在成功保存到数据库后,我使用了Redirect::back()
方法,但不幸的是我没有重定向到请求的页面之前getEdit
但取而代之的是返回getEdit
。
我有可能改变这种行为吗?
我有一个控制器,通过Route::controller()
进行路由。将表单重定向回到Laravel的上一页之后
我有getEdit
和postEdit
函数。我在不同位置链接到getEdit
-功能,并希望用户在表单中进行更改并提交之后将其重定向到该位置。
在成功保存到数据库后,我使用了Redirect::back()
方法,但不幸的是我没有重定向到请求的页面之前getEdit
但取而代之的是返回getEdit
。
我有可能改变这种行为吗?
经过搜索和尝试,我想出了一个解决方案,似乎是完美的我的方案,似乎也很干净。
我只需在我的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('/')
。
工程就像一个魅力,完全解决了我的问题。
+1好的一个!尽可能简单。 – 2014-09-19 10:48:45
Typo(用t替换t)让我有一分钟应该是'Session :: put('url.intended',URL :: previous()); ' – 2016-04-01 14:01:51
如果表单中存在任何验证错误,该怎么办?用户将被重定向到同一页面,同一页面被存储在会话中。还试图编辑答案添加缺少的右括号,但显然编辑必须至少有6个字符! – Ehsan 2017-10-01 11:51:34
添加使用Laravel 5蒂姆回答一个例子:
在有一个编辑表格的控制器方法:
Session::put('requestReferrer', URL::previous());
这将保存前一页面的链接到编辑网址形式为会议变种requestReferrer
。
为了使您的更新方法重定向到这个变量:
return redirect(Session::get('requestReferrer'));
我假设,如果不止一种形式是开放的一次用户,这可能不会产生预期的行为。如果有人提出更好的修订,我会编辑这篇文章以包含它。
感谢您的回答,但除了我的回答之外,我看不到相关性?在你的解决方案中(也不是特定于L5的),你也不能使用意向重定向。如果会话不存在会怎么样?你会得到一个错误。 – Tim 2015-10-19 06:44:42
我的歉意,我没有意识到url.intended是为reserved()方法保留的。我的意图是要澄清你给出的例子是在做什么,通过尝试这样做暴露了你的例子实际上在做什么!我看到意图有一个回退机制。我会稍微删除这个答案。会话必须处于活动状态才能工作是吗? – thatnetworkguy 2015-10-20 16:25:32
我现在看到我最初的执行失误,我错过了在'Facpected'> Facade中使用的拼写错误。< – thatnetworkguy 2015-10-20 18:08:09
如何将编辑前的URL传递给控制器作为参数? – 2014-09-19 08:47:39
也是这样想的。但它必须是查询字符串(比如'/ edit/11?back = route/to/action')才能工作,对吗? – Tim 2014-09-19 08:50:52
我看到了,等待编辑 – 2014-09-19 08:54:50