次のような状況があります。
symfony2 フォームをモーダルにレンダリングしました (ブートストラップと jQuery を使用)。フォームが無効な場合、モーダル ボックス内にエラー メッセージが表示されます。次のようにモーダル ボックスにリンクしました: route/to/action#modal
どうやってやるの?
私のテンプレートには、モーダルへの簡単なリンクがあります。
<a data-toggle="modal" href="#new">Add member</a>
このリンクはモーダルを開きます。内部には、タイトル、first_name、および last_name を含む単純なフォームがあります。
{{ form_widget(form.title) }}
{{ form_widget(form.first_name) }}
{{ form_widget(form.last_name) }}
フォーム クラスでは、次のように定義しました。
$builder
->add('title', 'text', array('required' => false))
->add('first_name')
->add('last_name');
したがって、役職はオプションで、姓と名は必須です。そこで、これらの行を validation.yml に追加しました。
Acme\MemberBundle\Entity\Member:
properties:
first_name:
- NotBlank: { message: Please enter a first name }
last_name:
- NotBlank: { message: Please enter a last name }
そして、私のアクション(フォームが送信されたときに呼び出されます)には、次の行があります:
/**
* Creates a new Member entity.
*
* @Route("/create", name="acme_member_create")
* @Method("post")
* @Template("AcmeMemberBundle:Member:index.html.twig")
*/
public function createAction()
{
$member = new Member();
$em = $this->getDoctrine()->getEntityManager();
$request = $this->getRequest();
$form = $this->createForm(new MemberType(), $member);
$form->bindRequest($request);
if ($form->isValid()) {
$em->persist($member);
$em->flush();
return $this->redirect($this->generateUrl('acme_member'));
}
$entities = $em->getRepository('AcmeMemberBundle:Member')->findAll();
return array(
'entities' => $entities,
'form' => $form->createView()
);
}
したがって、 for が有効でない場合は、 index.html.twig (モーダルが表示される場所) に戻りたいと考えています。