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

问题描述 投票:1回答:3

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

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

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

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

laravel-4
3个回答
9
投票

在搜索和尝试之后,我想出了一个似乎对我的场景来说非常完美的解决方案,对我来说似乎也很干净。

我只是在我的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('/')

像魅力一样,完全解决了我的问题。


1
投票

使用Laravel 5为Tim的答案添加一个例子:

在具有编辑表单的控制器方法中:

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

这会将链接到编辑表单的上一页的URL存储为会话var requestReferrer

要让您的更新方法重定向回此变量:

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

我假设如果用户一次打开多个表单,这可能不会给出预期的行为。如果有人建议更好的修改,我会编辑这篇文章以包含它。


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中的中间件,以获取要存储的方法以进行重定向。

© www.soinside.com 2019 - 2024. All rights reserved.