以下のようにsymfony2にコントローラーがあります。ユーザーフォームが有効な場合、他のリンクにリダイレクトされますが、エラーがある場合は同じページに残り、エラーが表示されます。クライアント側の検証が無効になっていて、サーバー側の検証のみがエラーをチェックしている一般的なシナリオです。
/**
* Creates a new User entity.
*
* @Route("/create", name="admin_user_create")
* @Method("post")
* @Template("UserBundle:User:new.html.twig")
*/
public function createAction()
{
$entity = new User();
$request = $this->getRequest();
$form = $this->createForm(new UserType() , $entity);
$form->bindRequest($request);
if($form->isValid())
{
// DO SOMETHING ...
return $this->redirect($this->generateUrl('some_link' , array( 'user_id' => $entity->getId() )));
}
// If the form is NOT valid, it will render the template and shows the errors.
return array(
'entity' => $entity ,
'form' => $form->createView()
);
}
シナリオは次のようになります。
- ユーザーがフォームに無効なデータを入力しました
- ユーザーがフォームを送信する
- フォームが有効かどうかをコントローラーがチェックする
有効でないため、この場合はテンプレートをレンダリングします
@Template("UserBundle:User:new.html.twig")
- ブラウザのルートは
/create
- ユーザー
click
がブラウザのリンクを使用していて、そうでない場合post
、エラーが発生します
どうすればこれを修正できますか? もう一度リダイレクトする必要がありますか? メソッドなので、post
リダイレクトすることは可能ですか?