如何创建一个“OR”的Symfony验证约束

问题描述 投票:0回答:1

如何将一个去创造一个Symfony的4.2约束验证约束的多个批次,但只有当所有的人都失败,失败?

这是我的使用情况。

我想验证的变量可以是特定类的对象,或代表相同类的对象阵列。然后我将有两种情况:

  1. 我会想验证对Type(type=array)约束,然后一个Collection(fields={...})约束,以确保这是适当的结构,然后我就可以反序列化和获取对象的数组;
  2. 或者我会想验证对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总是空的,即使它应该失败。仿佛验证拒绝验证相同值的两倍,即使是针对不同的组约束。这是真的,如何规避呢?

php symfony validation symfony4
1个回答
0
投票

您可以使用expression constraint。它允许通过“或”多重测试结合起来。

© www.soinside.com 2019 - 2024. All rights reserved.