Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2分页:在超链接中序列化表单_Php_Forms_Symfony_Pagination - Fatal编程技术网

Php Symfony2分页:在超链接中序列化表单

Php Symfony2分页:在超链接中序列化表单,php,forms,symfony,pagination,Php,Forms,Symfony,Pagination,这应该很容易,但无法找到解决此问题的方法。我想对搜索查询的结果进行分页。用户将使用具有多个条件的表单,他们可以浏览每页的结果页 我不想使用KnpPaginatorBundle,因为搜索可以返回数千个结果,我不想将它们全部删除。如果搜索条件是硬编码的,我会使用和分页部分工作得很好 我的问题是,“下一页”按钮是一个超链接,它传递了正确的page GET变量,我正在努力传递链接中的搜索条件 表单在提交时运行良好,所有条件都通过GET或POST传递,具体取决于我的配置,当我调用$form->handle

这应该很容易,但无法找到解决此问题的方法。我想对搜索查询的结果进行分页。用户将使用具有多个条件的表单,他们可以浏览每页的结果页

我不想使用KnpPaginatorBundle,因为搜索可以返回数千个结果,我不想将它们全部删除。如果搜索条件是硬编码的,我会使用和分页部分工作得很好

我的问题是,“下一页”按钮是一个超链接,它传递了正确的page GET变量,我正在努力传递链接中的搜索条件

表单在提交时运行良好,所有条件都通过GET或POST传递,具体取决于我的配置,当我调用
$form->handleRequest()
时,表单数据会更新。我希望能够在我的下一页超链接上使用相同的GET变量,这样
handleRequest
将允许我获取搜索条件,并正确显示每页上显示的搜索表单


如何生成url编码字符串以添加到下一页超链接?我还可以找到一个更好的解决方案,在每个页面之间保留搜索条件,但无法在会话中保存它们。

我猜您正在使用Symfony路由器生成上一页和下一页的URL。因此,您只需将其作为附加参数提供给您的搜索条件。由于这些条件不是路由参数,Symfony将把它们放在GET参数中

$this->get('router')->generate('search_page', $criteria, true);

出于好奇,为什么您不能在会话中保存搜索条件?主要有两个原因:第一个原因是我们需要在浏览器的不同选项卡中同时进行搜索(可以通过不同选项卡的某种搜索键来克服,但我觉得这更像是一种黑客行为)。出于第一个原因,我们尽量避免会话。第二,我们需要的链接是可共享的。我不知道,非常少!由于我的表单有实体字段,我应该有一些代码来将表单数据(将包含一个实体)转换为更适合路由器的数据(带有ID)。我希望存在
$form->handleRequest()
的“reverse”函数,但显然不是。你是说
$form->getData()
以数组形式返回表单数据吗?是的,我想这样做:首先
$data=$form->getData()
。因为我的表单类似于
'$builder->add('product','entity',array('class'=>'MyBundle:product','property'=>'name')
$data
将包含一个关联数组,其中实体作为值。然后,我将在此数组上循环,用实体的Id替换实体,并将生成的数组传递给路由器。有没有更简单的方法?这是我能看到的唯一方法:)