1

このバンドルをアプリケーションで使用しています。コントローラーは、検索フォームを表示し、応答を取得して処理する典型的なものです (例):

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 コントローラーの例では、フォームを使用してクエリが生成されず、この質問は役に立ちませんでした。

ありがとう。

4

1 に答える 1