首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony2: KnpPaginator只显示带有POST表单的第一页

Symfony2: KnpPaginator只显示带有POST表单的第一页
EN

Stack Overflow用户
提问于 2014-02-03 22:23:42
回答 1查看 2.5K关注 0票数 1

我在应用程序中使用这个包。控制器是典型的,它显示搜索表单,接受响应并处理它(一个例子):

代码语言:javascript
复制
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更改为获取并传递URL中的参数:

代码语言:javascript
复制
$form = $this->createForm(new ExampleFindType(), $example, array(
           'action' => $this->generateUrl('example_find'),
           'method' => 'GET',
));

分页器工作得很好。

我做错了什么吗?是否可以使用POST表格?

我已经搜索了一个答案,但是我看到的所有KnpPagintor控制器示例都没有用表单生成查询,而且这个问题也帮不了我。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-03 23:46:38

不应该使用POST方法来获取数据。

否则,如果需要使用POST方法,则需要会话中的数据。然而,虽然使用GET方法更有意义,但是很难构建一个良好的用户体验。

你可以找到一个关于MDN上HTTP的广泛文档

  • 请求数据时应使用GET方法。
  • 当您保存数据(比如将注释保存到数据库)或其他数据操作时,应该使用POST方法。

谷歌在自己的搜索页面上使用GET

https://www.google.com/#q=symfony&start=10

q是我搜索的内容,start是分页器值。他们可能使用偏移量而不是页码来避免计算偏移量(更快、更便宜)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21539097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档