我遇到了一些问题。 在实体中我设置了验证。 我有那里的术语字段,这是必需的(NotBlank约束)。 它工作正常,但当某人正在编辑对象时,我想禁用此字段上的验证;那么它不是必需的,因为有人已经上传了这个文件。当然,我在控制器中只有一种形式,一种观点和两种行为。 我该如何处理这种情况?Symfony3仅在添加对象时验证字段
感谢
我遇到了一些问题。 在实体中我设置了验证。 我有那里的术语字段,这是必需的(NotBlank约束)。 它工作正常,但当某人正在编辑对象时,我想禁用此字段上的验证;那么它不是必需的,因为有人已经上传了这个文件。当然,我在控制器中只有一种形式,一种观点和两种行为。 我该如何处理这种情况?Symfony3仅在添加对象时验证字段
感谢
您可以使用一个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();
}
}
}
可以实现这种行为被确认团组:
的定义是:
/**
* @Assert\NotBlank(groups={"creation"})
*/
private $terms;
而对于验证你做:
时创建和
$errors = $validator->validate($someVar, null, array('edit'));
编辑时。
我阅读群体,但我只是想只更改验证此一个字段,只有在编辑时。在这个解决方案中,我必须制作2组。有没有其他的解决方案,让它以另一种方式工作?顺便说一句,我应该把这个:$ errors = $ validator-> validate($ author,null,array('registration')); ? – r3m4k3
这是好的,但首先我想找到一些解决方案,并在批注中进行验证。 – r3m4k3
好吧,我已经分析过这个。在这种情况下,这种解决方案对我来说更好。谢谢! :) – r3m4k3
没问题!如果你想使用注解,你可以尝试使用'Assert \ Expression()'创建一个规则。我相信这是可能的,但是这个解决方案也可以。 –