为什么我的验证组不起作用?

时间:2014-07-21 17:47:43

标签: php validation symfony constraints

我有一个拥有大量批准的实体。所有批准都从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;
}

然而,未触发验证,该字段设置为所有验证都被禁用。这是我想要实现的,仅基于条件。

1 个答案:

答案 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 
    }
}

我在那里添加了我想对验证组做的事情。我想也应该可以和他们一起工作。