首页 > 解决方案 > 在 Laravel 中导航回搜索页面时记住结果

问题描述

我使用 Laravel 创建了一个搜索页面,顶部有“要搜索的文本”过滤器。当鼠标离开过滤器时,页面的 JavaScript 会触发 Ajax 调用,然后返回结果。

因为我也启用了分页(使用 Ajax),所以当我单击第 2 页(一个类似于:http://project.test/customers?page=2的链接)时,顶部的过滤器会保留任何以前输入的文本,并且搜索结果被保留,这正是我所需要的!

现在的问题:

我拥有的数据库有两个主表。

  1. 顾客

  2. 购买

关系: 客户可以进行多次购买任何给定的购买虽然属于单个客户

我建立了一个搜索页面,以便用户可以搜索符合给定搜索条件的客户(例如,属于特定城市或国家的客户)。

在显示所有匹配客户记录的搜索过滤器下方的表格中,我有一列,带有一个购买按钮,然后将用户带到该特定客户的购买页面(这里,购买按钮转到表单 project.test 的链接/客户/{{id}}

{id} 通过一个路由,然后加载一个新页面,显示该特定客户的所有购买。

现在,我在此购买页面上有一个“返回”按钮,链接如下:

项目.测试/客户

然后加载原始搜索页面(但重新加载)。

这就是问题!!!

因为页面是重新加载的(使用链接:project.test/customers)

搜索过滤器被清除,页面改为显示所有客户。因此,用户必须再次重新输入所有搜索条件——这对用户来说很烦人,因为他/她经常需要在给定的一组客户中更改一批与给定的匹配的购买记录一组搜索条件 - 当导航到客户的购买页面,然后导航回主搜索页面时,宁愿不必一次又一次地重新输入相同的条件。

鉴于这个问题,我的问题是,从概念上讲,是否有可能使用 Laravel 从搜索页面转到另一个页面,然后使用某种方法返回原始搜索页面,以获取搜索过滤器和结果,从以前开始,还在那里吗?- 这将是一个超级有用的东西!

我在其他网站上看到过这样做,可能使用其他网络技术,但我只是不确定如何开始/从哪里开始使用 Laravel/PHP 做这件事?

感谢您的帮助,在此先感谢!

标签: phplaravellaravel-session

解决方案


将搜索条件存储在用户的session中,当他们返回时将它们传递回搜索页面。

假设您有一个具有搜索路由功能的控制器:

public function search (Request $request)
{
    // store the search criteria 
    session(['search_criteria' => $request->input()]);

    // return the results
}

然后在另一个控制器函数中,将原始参数添加到响应中:

public function someRouteMethod (Request $request)
{
    return redirect()->with('search_criteria', session('search_criteria'))->to('/search');
}

然后在搜索页面中用$search_criteria数据重新填充表单:

<input value="{{ !empty($search_criteria) ? $search_criteria['foo'] : '' }}" name="foo">

推荐阅读