[英]How to create an “OR” Symfony Validator Constraint
如何创建一个Symfony 4.2约束来验证多批约束,但是只有在所有约束都失败时才会失败?
这是我的用例。
我想验证一个变量,该变量可以是特定类的对象,也可以是表示同一类对象的数组。 然后,我将有两种情况:
Type(type=array)
约束,然后再验证Collection(fields={...})
约束,以确保这是一个具有适当结构的数组,然后我可以反序列化并获取对象; Type(type=MyClassName)
进行验证。 因此,如果情况1或情况2成功,则最终约束应该成功,并且只有当两个都失败(例如,传递了string
)时,最终约束才应该失败。
我认为小组可能会以某种方式有用,但我不确定在这种情况下如何正确使用小组。
我已经有了实现该方法的想法,但是以某种方式失败了,我不知道为什么:
$violations1 = $this->context->getValidator()->validate($value, $constraints1);
$violations2 = $this->context->getValidator()->validate($value, $constraints2);
// Check both violations and if at least one of them is empty - succeed.
// If all of them fail, copy violations to the current context.
如您所见,我将针对$constraints1
验证该值, $constraints1
是一个约束数组,以检查该值是否为有效数组。 然后,我将针对$constraints2
验证该值,后者是一个不同的约束数组,用于检查该值是否是特定类的对象。
在这一点上,我只想复制冲突并失败,或者如果$violations1
或$violations2
为空,则成功。
问题是,由于某种原因, $violations2
始终为空,即使它应该失败。 好像验证器拒绝两次验证相同的值,即使它受到一组不同的约束。 这是真的吗?如何规避呢?
您可以使用表达式约束 。 它允许将多个测试与“或”组合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.