将表单重定向提交回Laravel的上一页后

时间:2014-09-19 07:53:14

标签: laravel-4

我有一个通过Route::controller()路由的控制器。

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

我成功保存到数据库后使用了Redirect::back()方法,但遗憾的是我没有被getEdit重定向到请求的页面,而是回到getEdit

我是否有可能改变这种行为?

3 个答案:

答案 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中为要存储的方法调用中间件即可进行重定向。