Symfony2 分页:在超链接中序列化表单
Posted
技术标签:
【中文标题】Symfony2 分页:在超链接中序列化表单【英文标题】:Symfony2 pagination: serializing a form in a hyperlink 【发布时间】:2014-01-07 11:11:55 【问题描述】:这应该很容易,但找不到解决此问题的方法。我想对搜索查询的结果进行分页。用户将使用具有多个条件的表单,他们可以浏览每页的结果页面。
我不想使用 KnpPaginatorBundle,因为搜索会返回数以千计的结果,我不想将它们全部混合。我使用Doctrine paginator,如果搜索条件是硬编码的,则分页部分效果很好。
我的问题是 next page 按钮是一个传递正确 page GET 变量的超链接,而我正在努力传递链接中的搜索条件.
提交时表单运行良好,所有条件都通过 GET 或 POST 传递,具体取决于我的配置,并且当我调用 $form->handleRequest()
时表单数据会更新。我希望能够在我的 下一页 超链接上使用相同的 GET 变量,这样handleRequest
将允许我获取搜索条件,并在每个页面上显示搜索表单页面,显示正确。
如何生成 url 编码字符串以添加到 下一页 超链接?我也愿意找到更好的解决方案来保留每个页面之间的搜索条件,但无法在会话中保存它们。
【问题讨论】:
出于好奇,为什么不能在会话中保存搜索条件? 有两个主要理由:首先是我们需要在浏览器的不同选项卡中同时进行搜索(可以通过某种搜索键来克服跨标签会有所不同,但对我来说这听起来更像是一种黑客攻击)。出于第一个原因,我们尽量避免会话。其次,我们需要链接是可共享的。 【参考方案1】:我猜你正在使用 Symfony 路由器来生成你的上一页和下一页 URL。因此,您只需将您的搜索条件作为附加参数。由于这些条件不是路由参数,Symfony 会将它们放在 GET 参数中。
$this->get('router')->generate('search_page', $criteria, true);
http://symfony.com/doc/current/book/routing.html#generating-absolute-urls
【讨论】:
我不知道,非常少!由于我的表单有实体字段,我应该有一些代码来将表单数据(将包含一个实体)转换为更适合路由器的东西(带有 id)。我希望存在$form->handleRequest()
的“反向”功能,但显然没有。
您的意思是$form->getData()
将您的表单数据作为数组返回吗?
是的,这就是我想做的:首先$data = $form->getData()
。由于我的表单有类似'$builder->add('product','entity',array('class'=>'MyBundle:Product','property'=>'name'));
的内容,$data
将包含一个以实体为值的关联数组。然后我会在这个数组上循环,用它们的 ID 替换实体,并将结果数组传递给路由器。有没有更简单的方法?
这是我能看到的唯一方式:)以上是关于Symfony2 分页:在超链接中序列化表单的主要内容,如果未能解决你的问题,请参考以下文章