Php 通过zend_表单执行的搜索结果分页的最惯用方式是什么

Php 通过zend_表单执行的搜索结果分页的最惯用方式是什么,php,zend-framework,zend-form,zend-route,zend-paginator,Php,Zend Framework,Zend Form,Zend Route,Zend Paginator,我已经实现了一个action+视图,它列出了数据库中的所有行,并允许您使用zend_paginator对它们进行分页。我还编写了一个action+视图,它采用一个表单post(或get),构造一个Solr查询,并返回一个zend_paginator适配器来遍历结果 我遇到的问题是如何在回发后通过查询分页,这是一个相对复杂的搜索表单(需要搜索8个字段) 我所能看到的选项有: 移动已发布的参数 转到新的url并重定向 写我的 自己的保留查询的分页器 字符串参数 序列化 将表格的结果发布到 会话,并

我已经实现了一个action+视图,它列出了数据库中的所有行,并允许您使用zend_paginator对它们进行分页。我还编写了一个action+视图,它采用一个表单post(或get),构造一个Solr查询,并返回一个zend_paginator适配器来遍历结果

我遇到的问题是如何在回发后通过查询分页,这是一个相对复杂的搜索表单(需要搜索8个字段)

我所能看到的选项有:

  • 移动已发布的参数 转到新的url并重定向
  • 写我的 自己的保留查询的分页器 字符串参数
  • 序列化 将表格的结果发布到 会话,并在 分页
以下哪一种是zend/php的最佳实现方式?更重要的是,实现起来最快? 救命啊!!!!!
谢谢。

我不会接受这个答案,除非我确信没有人有更好的答案,但我已经做出了决定。我选择了PRG模式(post-redirect-get)

这将重定向到一个url,其中表单内容作为参数-www.url.com/form/param1/val/param2/val


array_filter命令去除所有空参数,这意味着您将得到一个干净、可添加书签、搜索引擎优化友好的url,zend_paginator可以直接使用该url。

这是一个好问题。我使用了第一种方法:在post中接受params,然后重定向到一个填充有params的路由,在该路由中我执行搜索、分页等。但我承认,我从来没有真正满意过它(第一次搜索有两个HTTP请求)。从不喜欢会话方法b/c我希望这些搜索结果页面是(永久)url可寻址的。有兴趣看看我们得到了什么答案。@David首先有理由接受post中的params吗?让我印象深刻的是,搜索是一个相当“GETty”的操作……我很高兴表单操作应该是一个get,但这不适合paginator控件,原因有二。首先,paginator控件将忽略从其生成的页面链接中删除查询字符串,其次,paginator控件将添加元素以将页码存储到url路径,而不是查询字符串,这建议我应该把我的搜索参数放在url中。@Matt:我同意搜索应该是一种让结果url可寻址的方法。但我似乎记得,我在重建url时遇到了一些问题,与Zend_Paginator和paginate partial一起工作,使querystring参数按我想要的顺序显示。我确信有更好的方法可以做到这一点,但我最终还是用一条路径来处理空表单,另一条路径来处理结果。不要告诉任何人我通常更喜欢会话方式,因为即使在用户对url进行了一些操作或进行了一些长而复杂的页面导航之后,也不会丢失用户条目。您可以将参数存储在多个会话名称空间中,其中一些搜索参数可以在一些完全不同的搜索问题上重用(预先填充一些搜索过滤器,尝试猜测用户正在搜索什么)。第二步,您可以将url SEO参数视为一个插件,并添加一些任务来检索会话存储的标准,并将它们放在url上。
    if ($request->isPost()) {
        if ($form->isValid($request->getPost())) {
            return $this->_helper->redirector('index','contact',NULL,array_filter($form->getValues()));
        }
    }