2013-05-06 31 views
0

我正在寫一個忘記密碼錶單,並且使用PHP驗證(而不是YML),我試圖首先檢查電子郵件地址是否存在。Symfony驗證器與教義查詢

我想我主要是在那裏,但我似乎無法在驗證器內部運行一個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; 
    } 
} 

我得到「未定義的屬性 - 容器」。

+0

也許這可以幫助你:http://php-and-symfony.matthiasnoback.nl/2011/11/symfony2-creating-a-validator-with-dependencies-make-it-a-service/ – 2013-05-06 12:31:34

+0

謝謝,但它沒有顯示如何在那裏得到一個Doctrine查詢 – James 2013-05-06 12:37:54

回答

0

只是傳遞學說服務驗證這樣的:

protected $doctrine; 

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

,比你services.yml函數:$ this-:

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

,然後你可以在你的驗證像做> doctrine-> getRepository( '...');

+0

我已經添加了代碼並編輯了DependencyInjection/Configuration.php,但是現在我得到'沒有可以加載配置的擴展......'。我錯過了什麼嗎? – James 2013-05-06 13:19:54

+0

你能給我完整的錯誤嗎?因爲我想知道他無法加載哪個擴展。 – NoScope 2013-05-06 13:29:11

+0

看看http://www.lifemirror.org/users/forgotten – James 2013-05-06 13:31:04