GroupSequence с валидаторами из унаследованных классов, кажется, не работают правильно - PullRequest
0 голосов
/ 05 октября 2018

В настоящее время я немного застрял:

Я хочу создать специальную проверку для моего пользовательского объекта, которая будет выполняться только тогда, когда все другие проверки пройдены успешно.Это может быть решено с помощью @GroupSequence и валидаторов в группах до последней группы, содержащей мой «специальный» валидатор:

use FOS\UserBundle\Model\User as BaseUser;

    ...

/*
 * @Assert\GroupSequence({"User", "Strict"})
 * @UniqueEntity("email", message="xx", groups={"User"})
 * @MyAssert\UserValidConstraint(groups={"Strict"})
*/

class User extends BaseUser {

    ....

}

При этом моя UserValidConstraint не выполняется, когда электронная почта не является уникальной - то естьожидается, и это поведение, которое я хочу получить.

Также выполняются ограничения из базового класса.Я получаю сообщения об ошибках из базового класса, если пароль слишком короткий и т. Д. Также работает должным образом.
Но моя проблема заключается в том, что мое специальное ограничение также всегда выполняется при сбое этих проверок базового класса.
Этокажется, что эти проверки как-то не распознаются этим правилом GroupSequence.

Любые намеки, что я могу делать не так?Или это ошибка в Symfony?

Использование
Symfony 4.1.4 FOS Userbundle из git / dev-master

1 Ответ

0 голосов
/ 25 октября 2018

Поведение немного странное:
Чтобы оценить проблему, я написал несколько тестов для изучения поведения валидаторов.
Там я мог убедиться, что GroupSequence правильно работает с унаследованными классами.

Данное ограничение относится к FOS-Userbundle.Там ограничения определяются с помощью YAML, тогда как мои ограничения определяются аннотациями.Может быть, есть проблема?

В качестве обходного пути я добавил еще один UniqueConstraint для адреса электронной почты в своем классе пользователя и выдал ему пустое сообщение об ошибке.Таким образом, пользователь не слишком смущен дополнительной ошибкой.; -)

...