我在应用程序中使用此捆绑包。控制器是典型的显示搜索表单,接收响应并处理它(示例):
public function indexAction()
{
$request = $this->getRequest();
$example = new Example();
$form = $this->createForm(new ExampleFindType(), $example, array(
'action' => $this->generateUrl('example_find'),
'method' => 'POST',
));
$form->handleRequest($request);
if ($form->isValid())
{
$em = $this->getDoctrine()->getManager();
$examples = $em->getRepository('ApplicationExampleBundle:Example')
->find_by_fields($example);
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$examples,
$this->get('request')->query->get('p', 1),
20
);
return $this->render('ApplicationExampleBundle:Default:searchResults.html.twig',
array('pagination' => $pagination));
}
return $this->render('ApplicationExampleBundle:Default:index.html.twig',
array('form' => $form->createView(),
));
}
当我执行搜索时,我正确地看到了结果列表和分页符。当我按下链接到下一页时出现问题。链接ID生成良好,URL以“?p = 2”结尾但似乎没有重新发送表单POST数据,因为它将我发送到搜索表单页面($ form-> isValid()为false)。
如果我将表单方法从POST更改为GET并传递URL中的参数:
$form = $this->createForm(new ExampleFindType(), $example, array(
'action' => $this->generateUrl('example_find'),
'method' => 'GET',
));
分页符完美无缺。
我做错了吗?可以使用POST表单吗?
我已经搜索了一个答案,但我见过的所有KnpPagintor控制器示例都没有生成带有表单的查询,而this question对我没有帮助。
感谢。
答案 0 :(得分:4)
您不应该使用POST方法来获取数据。
否则,如果您需要使用 POST 方法,则需要会话中的数据。然而,使用 GET 方法更有意义,因此很难建立良好的用户体验。
您可以找到extensive documentation about HTTP on MDN。
Google在自己的搜索页面上使用了 GET 。
https://www.google.com/#q=symfony&start=10
q
是我搜索的内容,start
是分页符值。他们可能使用偏移量而不是页码来避免计算偏移量(更快且更便宜)。