Symfony2中的UniqueConstraint错误消息处理

Ben*_*der 3 php symfony doctrine-orm

如何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
{
Run Code Online (Sandbox Code Playgroud)

CONTROLLER

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)
{
    ......
}
Run Code Online (Sandbox Code Playgroud)

表格类型

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'))
    ;
}
Run Code Online (Sandbox Code Playgroud)

bze*_*man 5

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"
Run Code Online (Sandbox Code Playgroud)

您还可以使用注释来使用验证约束.

有关更多信息,请阅读文档.