Symfony3仅在添加对象时验证字段


Symfony3 validate field only when adding object

我遇到了一些问题。在 enitity 中,我设置了验证。我有术语字段,这是必需的(非空白约束)。它工作正常,但是当有人编辑对象时,我想禁用此字段的验证;那么这不是必需的,因为有人已经上传了这个文件。当然,我在控制器中只有一个窗体、一个视图和两个操作。我该如何处理这种情况?

谢谢

你可以为此使用回调。

由于验证是在刷新之前进行的,因此您的实体不会有id,添加一个如下所示的约束:

class YourEntity
{
    // ...
    private $term;
    /**
    * @Assert'Callback
    */
    public function validate(ExecutionContextInterface $context)
    {
        if (!$this->getId() && !$this->getTerm()) {
            $context->buildViolation('This field is required!')
                ->atPath('term')
                ->addViolation();
        }
    }
}

您可以通过验证组来实现此行为: http://symfony.com/doc/current/book/validation.html#validation-groups

定义将是:

/**
 * @Assert'NotBlank(groups={"creation"})
 */
private $terms;

对于验证,您可以执行以下操作:

$errors = $validator->validate($someVar, null, array('creation'));

创建时和

$errors = $validator->validate($someVar, null, array('edit'));

编辑时。