在Symfony2中订购验证约束

时间:2015-02-14 19:04:06

标签: symfony

您正在使用管理系统。我想运行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;

3 个答案:

答案 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