我只是symfony的新手。
我在我的应用程序中使用symfony 2.0.23,我的实体上有以下断言:
/**
* @var \Doctrine\Common\Collections\Collection $discountLevelItems
*
* @ORM\OneToMany(targetEntity="DiscountLevelItem", mappedBy="discountLevel", cascade={"persist", "remove"})
* @CustomAssert\Count(min="1", minMessage="Must provide at least one item.")
* @Assert\All(constraints={
* @CustomAssert\UniqueInCollection(propertyPath="supplier", message="Duplicate suppliers are not allowed.")
* })
* @Assert\Valid
*/
private $discountLevelItems;
我想删除@Assert \ All(具有CustomAssert)并在特定表单事件期间添加它。
我该怎么做?
感谢!
答案 0 :(得分:1)
只需从注释中删除它,创建一个callback并实现自己的逻辑。
另请注意,只需使用validation groups
即可达到类似行为答案 1 :(得分:1)
第一个解决方案:基于事件。
从实体
中删除Assert \ All在表单中添加如下内容:
use Symfony\Component\Validator\Constraints\All;
// add this one in any event do you want.
$builder
->add('field', 'fieldtype', [
'constraints' => [new All(...)],
])
第二个解决方案:验证组
我在下面的注释中添加了groups
修饰符。
/**
* @var \Doctrine\Common\Collections\Collection $discountLevelItems
*
* @ORM\OneToMany(targetEntity="DiscountLevelItem", mappedBy="discountLevel", cascade={"persist", "remove"})
* @CustomAssert\Count(min="1", minMessage="Must provide at least one item.")
* @Assert\All(constraints={
* @CustomAssert\UniqueInCollection(propertyPath="supplier", message="Duplicate suppliers are not allowed.", groups = {'validation1'})
* })
* @Assert\Valid
*/
在此修改后,将validation_groups => 'validation1'
添加到您的表单。
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults([
'data_class' => '\Acme\DemoBundle\Entity\Demo',
'validation_groups' => 'validation1',
]);
}
以另一种形式,您可以将validation_groups添加为validation2,注释将在具有validation2的表单中禁用。