我有一个通过Route::controller()
路由的控制器。
我有getEdit
和postEdit
功能。我正在从不同位置链接到getEdit
- 函数,并希望在表单中进行更改并提交后,将用户重定向到该位置。
我成功保存到数据库后使用了Redirect::back()
方法,但遗憾的是我没有被getEdit
重定向到请求的页面,而是回到getEdit
。
我是否有可能改变这种行为?
答案 0 :(得分:8)
在搜索和尝试之后,我想出了一个似乎对我的场景来说非常完美的解决方案,对我来说似乎也很干净。
我只是在我的url.intended
函数中将会话密钥URL::previous()
设置为getEdit
,而不是使用网址参数或任何此类参数。
Session::put('url.intended', URL::previous()); // using the Facade
session()->put('url.intended', URL::previous(); // using the L5 helper
在我的postEdit
函数中,我只需执行return Redirect::intended('/')
。
像魅力一样,完全解决了我的问题。
答案 1 :(得分:1)
使用Laravel 5为Tim的答案添加一个例子:
在具有编辑表单的控制器方法中:
Session::put('requestReferrer', URL::previous());
这会将链接到修改表单的上一页的网址存储为会话var requestReferrer
。
让您的更新方法重定向回此变量:
return redirect(Session::get('requestReferrer'));
我假设用户一次打开多个表单,这可能不会产生预期的行为。如果有人建议更好的修订,我会编辑这篇文章以包含它。
答案 2 :(得分:0)
您也可以通过中间件来做到这一点:
<?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
中为要存储的方法调用中间件即可进行重定向。