【问题标题】:Laravel pagination with search parameters带有搜索参数的 Laravel 分页
【发布时间】:2013-08-10 19:32:44
【问题描述】:

我在单击分页链接时无法保留搜索参数。例如,如果搜索查询返回 40 条记录并且我有两个页面,则单击第二页将返回完整记录集的第二页,而不仅仅是搜索返回的 40 条记录。

这是来自我的控制器的postIndex()

public function postIndex(){

    $validator = Validator::make(
        Input::all(),
        array('priceMin' => array('numeric'),
            'priceMax' => array('numeric')
            )
    );

    if ($validator->fails()){
        return Redirect::to('items')->withInput()->withErrors($validator);
    } else {
        return Redirect::to('items')->withInput();
    }
}

还有我的getIndex()

public function getIndex(){

    $items= $this->retriever->getListings(Input::old(), 20);

    return View::make('listings', array('items' => $items);
}

retriever 对象然后遍历旧输入并找到所有有效的搜索参数,用它们查询数据库,并以指定的数量分页,在本例中为 20。

我尝试使用->appends(),但随后数据不在Input::old() 中,如果有10 个搜索参数,它的网址会很糟糕,因为它使用GET 而不是POST。如何将我的参数应用于分页链接?

【问题讨论】:

    标签: php pagination laravel laravel-4


    【解决方案1】:

    我永远不会使用 POST 请求进行任何过滤/排序/搜索!!!这是错误的

    一般来说,如果用户尝试重新加载已发送某些数据(搜索参数)的页面(搜索结果页面),浏览器会询问是否应该重新加载并重新发送该数据。我不能说,至少这很烦人。

    解决方案:坚持使用 Laravel 方法并使用 appends(),尽管它会生成“丑陋”的 URL - 这是一个常见的解决方案,无论框架如何。

    【讨论】:

    • 您也可以将搜索参数保存到您的数据库中,并且只使用 url 中的搜索 ID 和页面。更多的工作,但干净:)
    • 是的,这也是解决方案。这样,您可以发现用户搜索的内容等。
    • 是的,这是我最近才做的事情,因为我最初和你一样。我没有保存搜索查询。可能很快就会实施。
    • @RobGordijn 你能扩展你的想法吗?无论如何,我打算保存搜索。我不确定如何使用 URL 中的搜索 ID 从 postIndex() 重定向
    • @vikingsfan19 基本思想是让用户填写搜索表单,然后将其发布到您的应用中。在 post 方法中,您必须获取、验证并保存输入的搜索参数。使用来自您的User 的信息创建一个Search 模型。有一个与Search 相关的SearchRules,这样您就可以保存每个搜索参数(id、search_id、名称、值)。保存后将浏览器重定向到 /search/result/1337 之类的页面。 1337 将是Search 的ID。获取该搜索的规则,触发您的搜索类并显示结果。这样,网址是干净的(呃),你得到了搜索统计数据
    猜你喜欢
    • 2021-03-11
    • 2015-03-14
    • 1970-01-01
    • 2019-03-09
    • 2017-09-06
    • 2017-09-27
    • 2014-08-27
    • 2018-10-16
    • 1970-01-01
    相关资源
    最近更新 更多