您正在使用管理系统。我想运行Validation Constraint" NotBlank" 之前运行@SecurityAssert \ UserPassword。 (否则有不必要的数据库命中,并且是用户的两个不同的错误消息)这可能吗?谢谢!
use Symfony\Component\Security\Core\Validator\Constraints as SecurityAssert;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Constraints\NotBlank;
class YourClassName
/**
* @Assert\NotBlank( message = "For security reasons, please enter your current password.")
* @SecurityAssert\UserPassword(
* message = "Wrong value for your current password"
* )
*/
protected $oldPassword;
答案 0 :(得分:4)
正如@Qoop在评论中所说,使用sequence group之类的例子可以满足您的需求:
use Symfony\Component\Security\Core\Validator\Constraints as SecurityAssert;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Constraints\NotBlank;
/**
* @Assert\GroupSequence({"YourClassName", "After"})
*/
class YourClassName
/**
* @Assert\NotBlank(
message = "For security reasons, please enter your current password.")
* @SecurityAssert\UserPassword(
* message = "Wrong value for your current password",
groups={"After"}
* )
*/
protected $oldPassword;
请记住在构建表单时添加这些验证组。
答案 1 :(得分:2)
如果您需要一个或两个字段的解决方案,可以使用Validation Callback。您只需在方法中验证指定约束的字段,然后按顺序调用它们。
答案 2 :(得分:1)
使用Symfony验证器开箱即可完成约束。但您可以使用所需的所有功能编写自己的包装器进行验证。
例如,请参阅https://github.com/markwilson/symfony2-validator-priority-chain。