具有Doctrine查询的Symfony验证器

时间:2013-05-06 12:24:24

标签: validation symfony doctrine

我正在编写一个忘记的密码表单,使用PHP验证(而不是YML),我首先尝试检查电子邮件地址是否存在。

我想我大部分都在那里,但我似乎无法在验证器中运行Doctrine查询。以下是我到目前为止的情况:

class EmailExistsValidator extends ConstraintValidator
{

    public function isValid($value, Constraint $constraint)
    {
        $em = $this->container->get('doctrine.orm.entity_manager');
        $query = $em->createQuery('SELECT COUNT(id) FROM users WHERE email=:email')
            ->setParameter('email', $value);
        $count = $query->getQuery()->getSingleScalarResult();

        if ($count != 1) {
            $this->setMessage($constraint->message);

            return false;
        }

        return true;
    }
}

我得到“未定义的属性 - 容器”。

1 个答案:

答案 0 :(得分:0)

只需将doctrine服务传递给验证器,如下所示:

protected $doctrine;

    public function __construct($doctrine) {
        $this->doctrine = $doctrine;
    }

而不是你的services.yml:

my_service.my_constraint:
        class: MyCompany\MyBundleBundle\Validator\Constraints\MyValidator
        arguments:
            - '@doctrine'
        tags:
            - { name: validator.constraint_validator, alias: my_name }

然后您可以在验证器中执行以下操作:$ this-> doctrine-> getRepository('...');