Php Symfony2中的UniqueConstraint错误消息处理

Php Symfony2中的UniqueConstraint错误消息处理,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,如何将消息附加到实体本身下面的uniqueConstraints?下面的第二个查询将生成执行….SQLSTATE[23000]:完整性约束冲突:1062重复条目时发生的异常。。我怎么能打印“你要求什么…”而不是这条不友好的信息呢 SQL 1-插入汽车(型号、品牌\u id)值(“宝马”、“5”) SQL 2-插入汽车(型号、品牌_id)值('bmw','5') 注意:我发现Symfony文档总体上很差,大多数似乎都是捷径。如果你正在寻找一个解决方案,如果有人知道答案,那么如果没有,你就是幸运的你

如何将消息附加到实体本身下面的
uniqueConstraints
?下面的第二个查询将生成执行….SQLSTATE[23000]:完整性约束冲突:1062重复条目时发生的异常。。我怎么能打印“你要求什么…”而不是这条不友好的信息呢

SQL 1-
插入汽车(型号、品牌\u id)值(“宝马”、“5”)

SQL 2-
插入汽车(型号、品牌_id)值('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"
您还可以使用注释来使用验证约束


有关详细信息,请阅读。

此插入是否在表单提交后出现?是的,它来自表单类型。我已添加了表单类型作为上述参考。@DonCallisto不需要自定义验证程序。Symonfy2标准版为此提供了一个约束:
Symfony\Bridge\doctor\Validator\Constraints\uniquentity
。我正在使用
@uniquentity(fields={“model”、“brands”,},message=“Duplicated entry”)
所以从现在开始我将使用它。非常感谢。我会记住这是第二种选择的一个例子,谢谢。我在上面的评论中添加了解决方案+我也接受你的解决方案。