如何将一个去创造一个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
其价值是约束的数组检查,如果值是一个有效的数组。然后,我会验证对$constraints2
的值,它是一个不同的阵列约束来检查,如果该值是特定类的对象。
在这一点上我想刚才复制的侵犯和失败,或成功,如果任$violations1
或$violations2
是空的。
问题是,由于某种原因$violations2
总是空的,即使它应该失败。仿佛验证拒绝验证相同值的两倍,即使是针对不同的组约束。这是真的,如何规避呢?
您可以使用expression constraint。它允许通过“或”多重测试结合起来。