Laravel 存储 GET 参数以重定向回

Posted

技术标签:

【中文标题】Laravel 存储 GET 参数以重定向回【英文标题】:Laravel store GET parameters to redirect back 【发布时间】:2018-11-14 21:42:51 【问题描述】:

在我的应用程序中,我目前有一个仪表板,该仪表板接受 GET 参数列表来执行过滤和分页等操作。

我的网址的一个例子是这样的

http://mysite.local/dashboard?filters=true&search=&optIn=on&dateFrom=&dateTo=&submit=Search&page=3

然后,我可以在我的仪表板上创建一个链接,将我带到用户信息,以便我可以对其进行编辑。在我的用户页面中,我可以有一个按钮,里面只有 url()->previous() ,可以返回我的仪表板并保留我的所有 GET 参数。

问题是用户页面具有更新能力,它向 POST 控制器发送请求,然后返回用户页面并返回成功或错误消息,这可以完成并更新尽可能多的次数,所以一旦完成,url()->previous 现在是用户页面,我丢失了包含所有参数的仪表板 URL。

我需要能够将仪表板网址与所有 GET 参数一起保存,以便用户在用户页面上完成操作后,他们始终可以使用过滤器和页面返回仪表板。

实现这一目标的最佳方法是什么?

【问题讨论】:

How to redirect back to form with input - Laravel 5的可能重复 您可以将过滤器存储在会话中,并在用户返回仪表板时重新填充过滤器。 Laravel Request getting current path with query string的可能重复 @GauravDave 你读过这个问题吗?这根本不是重复的...... 您在仪表板页面上有仪表板 URL(带有查询字符串),您可以将其保存在全局中并在每个视图中使用 【参考方案1】:

如果您打算在视图上执行 url()->previous(),那么您必须解决获取参数并将其聚合到 url 的问题。

您也可以将其存储在 Session 中,但话又说回来,您必须每次都验证 Session 的内容。

您为什么不在控制器/路由上工作并操纵它?

如果你想填充输入,试试这个:

https://laravel.com/docs/5.6/requests#old-input

您可以在此处查看有关 url 的更多信息:

https://laravel.com/docs/5.6/urls

【讨论】:

“你必须每次都验证 Session 的内容” - 你在存储数据时验证它,在使用它之前你无论如何都需要这样做。无需额外验证。【参考方案2】:

我认为请求输入是正确的方式,我就是这样做的。

我在我的表单上附加了一个隐藏的输入,它检测是否从表单传回了以前的 URL,如果没有,则使用以前的页面 URL。

 Form::hidden('previous_url',  old('previous_url', url()->previous()) )

然后我确保输入是从控制器传回的

return redirect()->back()->withInput(Input::all());

最后我将相同的输入代码放在<a href=""> 中,就像这样

<a href="old('previous_url', url()->previous())" class="back-button"><i class="far fa-arrow-alt-circle-left"></i>Back</a>

当我第一次加载用户页面时,a 标签将始终包含上一页的 URL

【讨论】:

以上是关于Laravel 存储 GET 参数以重定向回的主要内容,如果未能解决你的问题,请参考以下文章

使用 Laravel 重定向到路由而不获取参数

如何根据Windows Phone 7中的参数值在按钮中传递参数并获取后面代码中的值以重定向到另一页?

登录以重定向到其他页面

单击按钮以重定向到父 URL

如何将没有参数的 Laravel 路由重定向到具有默认参数的控制器方法?

配置 nginx 以重定向文件太大 (413)