Проверка ограничений Symfony не работает, группы игнорируются - PullRequest
0 голосов
/ 19 февраля 2019

Я пытался создать свой валидатор, но он не работает.Документация не помогает, потому что она заботится только о проверке объекта и имеет один пример для проверки массива.

Я пытаюсь проверить мои данные на основе полей, отправленных с данными.Поэтому в запросе у меня есть поле type, которое либо credentials, google, либо facebook, и, в зависимости от значения этого поля, другие поля должны быть проверены.Конечно, сначала нужно проверить type.

Я пытался следовать документации для коллекций, но я получаю только неожиданные исключения и результаты.Иногда ошибки, иногда нет, вещь просто не работает, как ожидалось.

Учитывая следующий пример:

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 />";
}

Будет выводить:

[type]: This field is missing.
[username]: This field is missing.
[password]: This field is missing.
[passwordConfirm]: This field is missing.

Даже если яявно передали "credentials" группам.Я также пытался использовать опцию fields, но она привносила больше проблем.Кто-нибудь знает, как правильно использовать валидатор и использовать группы для проверки только подмножеств данных.

1 Ответ

0 голосов
/ 19 февраля 2019

почему вы используете Assert\Collection?это полезно для проверки массива похожих объектов / предметов

Я думаю, вы должны просто заменить: $constraints = new Assert\Collection([ на $constraints = [, чтобы сказать, что вы должны использовать простой массив ограничений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...