Symfony验证组(不是表单)

时间:2016-09-10 21:15:42

标签: validation symfony

似乎无法使验证组正常工作。它适用于默认组,但我似乎无法弄清楚如何在以下内容中指定不同的验证组:

$errors = $validator->validate($entity);

我是一个简单的实体,我正在测试:

/**
 * Class Login
 * @package AppBundle\Entity
 */
class Login
{
    /**
     * @Assert\NotBlank(
     *     message="not.blank",
     *     groups={"Default", "login"}
     * )
     *
     * @Assert\Email(
     *     message="email",
     *     groups={"Default", "login"}
     * )
     */
    public $email;

    /**
     * @Assert\NotBlank(
     *     message="not.blank",
     *     groups={"Default", "login"}
     * )
     */
    public $password;
}

如果我添加这样的参数,它会抱怨:

$errors = $validator->validate($entity, 'login');

但是必须有办法做到这一点,对吗?

2 个答案:

答案 0 :(得分:1)

实际上,使用Symfony3验证组的正确方法是将它们列为数组:

$errors = $validator->validate($entity, null, ['login']);

顺便说一句,根据您的使用情况,您可能不需要为每个媒体资源设置Default群组,而只使用群组Login代替login。然后,当您使用组Default验证实体时,它会自动包含组名等于类名的断言,在您的情况下为Login。有关详细信息,请参阅:http://symfony.com/doc/current/validation/groups.html

答案 1 :(得分:0)

在深入研究Symfony代码后,我发现了以下内容:

文件: /vendor/symfony/symfony/src/Symfony/Component/Validator/Validator/ValidatorInterface.php

行: public function validate($ value,$ constraints = null,$ groups = null);

所以如果我改变了这个:

$errors = $validator->validate($entity, 'login');

对此:

$errors = $validator->validate($entity, null, 'login');

有效!