我有一个通过Route::controller()
路由的控制器。
我有getEdit
和postEdit
功能。我将链接到来自不同位置的getEdit
函数,并希望在表单中进行更改并提交后将用户重定向到该位置。
我成功保存到数据库后使用了Redirect::back()
方法,但不幸的是我没有被重定向到所请求的页面,而是在getEdit
之前,而是回到getEdit
。
我是否有可能改变这种行为?
在搜索和尝试之后,我想出了一个似乎对我的场景来说非常完美的解决方案,对我来说似乎也很干净。
我只是在我的url.intended
函数中将Session密钥URL::previous()
设置为getEdit
,而不是使用URL参数或任何类型。
Session::put('url.intended', URL::previous()); // using the Facade
session()->put('url.intended', URL::previous(); // using the L5 helper
在我的postEdit
功能中,我只是做一个return Redirect::intended('/')
。
像魅力一样,完全解决了我的问题。
使用Laravel 5为Tim的答案添加一个例子:
在具有编辑表单的控制器方法中:
Session::put('requestReferrer', URL::previous());
这会将链接到编辑表单的上一页的URL存储为会话var requestReferrer
。
要让您的更新方法重定向回此变量:
return redirect(Session::get('requestReferrer'));
我假设如果用户一次打开多个表单,这可能不会给出预期的行为。如果有人建议更好的修改,我会编辑这篇文章以包含它。
您也可以通过中间件执行此操作:
<?php
namespace Kjjdion\Larapack\Http\Middleware;
use Closure;
class IntendUrl
{
public function handle($request, Closure $next)
{
// set intended url for redirect
$request->session()->put('url.intended', $request->url());
return $next($request);
}
}
然后,只需调用控制器construct
中的中间件,以获取要存储的方法以进行重定向。