このバンドルをアプリケーションで使用しています。コントローラーは、検索フォームを表示し、応答を取得して処理する典型的なものです (例):
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 コントローラーの例では、フォームを使用してクエリが生成されず、この質問は役に立ちませんでした。
ありがとう。