Symfony约束验证不起作用,已忽略组

Symfony约束验证不起作用,已忽略组,symfony,validation,Symfony,Validation,我试图创建我的验证器,但它不工作。 文档没有帮助,因为它只关心对象验证,并且有一个数组验证示例 我试图根据随数据一起发送的字段验证我的数据。 因此,我在请求中有一个字段类型,它是凭证、谷歌或脸谱,根据该字段的值,其他字段应该被验证。 当然,必须首先验证类型 我尝试的是遵循集合的文档,但我只得到意外的异常和结果。有时出错,有时不做,事情就是不按预期进行 给出以下示例: use Symfony\Component\Validator\Constraints as Assert; use Symfon

我试图创建我的验证器,但它不工作。 文档没有帮助,因为它只关心对象验证,并且有一个数组验证示例

我试图根据随数据一起发送的字段验证我的数据。 因此,我在请求中有一个字段
类型
,它是
凭证
谷歌
脸谱
,根据该字段的值,其他字段应该被验证。 当然,必须首先验证
类型

我尝试的是遵循集合的文档,但我只得到意外的异常和结果。有时出错,有时不做,事情就是不按预期进行

给出以下示例:

use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Validation;

require_once(__DIR__ . "/../vendor/autoload.php");

$validator = Validation::createValidator();

$constraints = new Assert\Collection([
    "type" => [
        new Assert\Required([
            "groups" => ["type"],
            "constraints" => new Assert\Choice([
                "choices" => ["credentials", "facebook", "google"],
            ])
        ]),
    ],
    "username" => [
        new Assert\NotBlank([
            "groups" => ["credentials", "facebook", "google"]
        ])
    ],
    "password" => [
        new Assert\NotBlank([
            "groups" => ["credentials"]
        ]),
        new Assert\Length([
            "min" => 6,
            "groups" => ["credentials"]
        ]),
    ],
    "passwordConfirm" => [
        new Assert\NotBlank([
            "groups" => ["credentials"],
        ]),
        new Assert\IdenticalTo([
            "groups" => ["credentials"],
            "propertyPath" => "password"
        ])
    ]
]);

$data = [];

$errors = $validator->validate($data, $constraints, "credentials");


foreach ($errors as $error) {
    echo $error->getPropertyPath() . ": " . $error->getMessage() . "<br />";
}
即使我已显式地将
“凭据”
传递给组。 我也尝试过使用
字段
选项,但它带来了更多问题。
是否有人知道如何正确使用验证器并使用组来实际验证数据的子集。

为什么要使用
Assert\Collection
?这对于验证类似对象/项的数组非常有用


我认为您应该将:
$constraints=newassert\Collection([
替换为
$constraints=[
),也就是说您应该使用一个简单的约束数组,为什么要使用
Assert\Collection
?这对于验证类似对象/项的数组很有用


我认为您应该将:
$constraints=newassert\Collection([
替换为
$constraints=[
,也就是说你应该使用一个简单的约束数组,因为文档中就是这样描述的。我必须使用Collection,因为我必须验证键/值,而不是数组本身。Collection基本上是处理一个数组,或者一个对象数组,而它似乎不是你的case。你能粘贴一个指向d的链接吗oc?反正我看到了
$data=[];
是一个空数组,您的错误是
此字段丢失了
,这是正确的,因为您没有提交任何数据,因为文档中就是这样描述的。我必须使用集合,因为我必须验证键/值,而不是数组本身。集合基本上是处理数组数组,或arr您可以粘贴到文档的链接吗?无论如何,我看到
$data=[];
是一个空数组,您的错误是
此字段丢失了,因为您没有提交任何数据
[type]: This field is missing.
[username]: This field is missing.
[password]: This field is missing.
[passwordConfirm]: This field is missing.