2016-04-27 36 views
1

我遇到了一些问题。 在实体中我设置了验证。 我有那里的术语字段,这是必需的(NotBlank约束)。 它工作正常,但当某人正在编辑对象时,我想禁用此字段上的验证;那么它不是必需的,因为有人已经上传了这个文件。当然,我在控制器中只有一种形式,一种观点和两种行为。 我该如何处理这种情况?Symfony3仅在添加对象时验证字段

感谢

回答

0

您可以使用一个Callback

由于验证发生在冲洗前,你的企业不会有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(); 
     } 
    } 
} 
+0

这是好的,但首先我想找到一些解决方案,并在批注中进行验证。 – r3m4k3

+0

好吧,我已经分析过这个。在这种情况下,这种解决方案对我来说更好。谢谢! :) – r3m4k3

+0

没问题!如果你想使用注解,你可以尝试使用'Assert \ Expression()'创建一个规则。我相信这是可能的,但是这个解决方案也可以。 –

0

可以实现这种行为被确认团组:

的定义是:

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

而对于验证你做:

时创建和

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

编辑时。

+0

我阅读群体,但我只是想只更改验证此一个字段,只有在编辑时。在这个解决方案中,我必须制作2组。有没有其他的解决方案,让它以另一种方式工作?顺便说一句,我应该把这个:$ errors = $ validator-> validate($ author,null,array('registration')); ? – r3m4k3

相关问题