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”)
所以从现在开始我将使用它。非常感谢。我会记住这是第二种选择的一个例子,谢谢。我在上面的评论中添加了解决方案+我也接受你的解决方案。