目前我有点卡住了:
我想为我的用户对象创建一个特殊的验证,该验证仅在所有其他验证成功时才执行。 这可以通过在包含我的“特殊”验证器的最终组之前的组中使用@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-Rule识别。
任何提示都可能是我做错了什么?还是Symfony中的错误?
使用
Symfony 4.1.4
来自git / dev-master的FOS Userbundle
答案 0 :(得分:0)
行为有点奇怪:
为了评估问题,我编写了一些单元测试来了解验证器的行为。
在那里,我可以验证GroupSequence是否可以正确地用于继承的类。
有问题的约束是FOS-Userbundle中的约束。那里的约束是用YAML定义的,而我的约束是通过注释定义的。也许有问题吗?
作为一种解决方法,我在用户类中为该电子邮件地址添加了另一个UniqueConstraint,并给出了一个空的错误消息。因此,用户不会对额外的错误感到困惑。 ;-)