Symfony2中的uniqueconconstraint错误消息处理


UniqueConstraint error message handling in Symfony2

如何将消息附加到实体本身下面的uniqueConstraints ?下面的第二个查询将生成An exception occurred while executing....SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry...。而不是这个不友好的信息,我怎么能打印"你要求什么什么…"?

SQL 1- INSERT INTO cars (model, brands_id) VALUES ('bmw', '5')

SQL 2- INSERT INTO cars (model, brands_id) VALUES ('bmw', '5')

注意:我发现Symfony文档一般都很差,而且大多数似乎都是捷径。如果你在寻找一个解决方案,如果有人知道答案,那么你很幸运,如果你不知道,你是....

实体

/**
 * @ORM'Entity
 * @ORM'Table(name="cars", uniqueConstraints={@ORM'UniqueConstraint(columns={"model", "brands_id"})})
 */
class Cars
{
控制器

try
{
    $submission = $form->getData();
    $em = $this->getDoctrine()->getManager();
    $cars = new Cars();
    $cars->setModel($submission->getModel());
    $cars->setBrands($submission->getBrands());
    $em->persist($cars);
    $em->flush();
    .......
}
catch (Exception $e)
{
    ......
}

表单类型

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->setAction($options['action'])
        ->setMethod('POST')
        ->add('brands', 'entity',
            array(
                'class' => 'CarBrandBundle:Brands',
                'property' => 'name',
                'multiple' => false,
                'expanded' => false,
                'empty_value' => '',
                'query_builder' => function (EntityRepository $repo)
                                    {
                                        return $repo->createQueryBuilder('b')->orderBy('b.name', 'ASC');
                                    }
            ))
        ->add('model', 'text', array('label' => 'Model'))
        ->add('button', 'submit', array('label' => 'Submit'))
    ;
}

validation.yml文件放到src/Car/BrandBundle/Resources/config文件夹中。

内容应该类似如下:

CAR'BrandBundle'Entity'Cars:
    constraints:
        - Symfony'Bridge'Doctrine'Validator'Constraints'UniqueEntity:
            fields: [model, brands_id]
            message: "your_message_here"

你也可以使用注解来使用验证约束。

>