Symfony2 フォームは検証に合格できるが、フォームの送信時に一意の制約が原因で Doctrine2 例外が生成されるという問題があります。この PDOException をキャッチすることはできますが、やりたいことは、フォームを無効にして、エンティティの特定の属性が重複していることを示すフォーム エラーを設定することです。私が持っているコードは次のとおりです。
$entity = new Tag();
$request = $this->getRequest();
$form = $this->createForm(new \Acme\AdminBundle\Form\Tag(), $entity);
$form->bindRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getEntityManager();
try {
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('tag_edit', array('id' => $entity->getTagId())));
} catch( ORM\PDOException $e) {
if ($e->getCode() === '23000') {
// What do I do here??
}
}
}
return array(
'entity' => $entity,
'form' => $form->createView()
);