我有一个拥有大量批准的实体。所有批准都从BaseApproval类扩展,我在其中定义了一个验证组:
abstract class BaseApproval {
...
/**
* @var string
*
* @ORM\Column(name="textField", type="text", nullable=true)
* @Assert\NotBlank(groups={"required"})
*/
private $textField;
/**
* @var \DateTime
*
* @ORM\Column(name="approvedAt", type="datetime", nullable=true)
* @Assert\NotBlank(groups={"required"})
*/
private $approvedAt;
}
为了概念验证,我在ApprovalFormType中实现了setDefaultOptions
的默认值:
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults([
'validation_groups' => function(FormInterface $form) {
return ['Default', 'required'];
}
]);
}
在实体中,添加了以下内容:
MyEntity {
/**
* @var HseApproval
* @ORM\OneToOne(targetEntity="Hn\AssetDbBundle\Entity\Approvals\SomeApproval", cascade={"persist"}, fetch="EAGER")
* @Assert\Valid
*/
private $someApproval;
}
然而,未触发验证,该字段设置为所有验证都被禁用。这是我想要实现的,仅基于条件。
答案 0 :(得分:0)
我没有意识到BaseEntity也有callback validator。
/**
* @ORM\Entity
...
* @Assert\Callback(callback="validate")
*/
abstract class Approval
{
...
/**
* @param ExecutionContextInterface $context
*/
public function validate(ExecutionContextInterface $context)
{
// some logic messing with my AssertNotBlank constraints
}
}
我在那里添加了我想对验证组做的事情。我想也应该可以和他们一起工作。