2016-04-06 23 views
0

電子メールIDが特定のドメインに属していない場合、私の質問に登録することができない登録フォームを作成しています。 symfonyはデフォルトでこの検証オプションを持っていますか?これを有効にするか、カスタム検証を作成する必要がありますか?例えばSymfony - 特定のドメインからの登録を制限する

私は唯一の電子メールIDは、あなたは、いくつかの電子メールドメインの電子メールアドレスをテストするためにRegex constraintを使用することができますyahoo.com

+0

あなたは、電子メールのドメインについて話している、質問を編集して考えてみて、「電子メールID」の提案のためのMarianoArgañaraz感謝@ –

+0

のようなものではありません。 – Saadia

答えて

2

いいえ、ドメインチェックのためのsymfony2のビルドイン機能はありません。しかし、あなたはそれを追加することができます。できることはcreating a custom constraintです。その後

namespace AppBundle\Validator\Constraints; 

use Symfony\Component\Validator\Constraint; 

/** 
* @Annotation 
*/ 
class EmailDomain extends Constraint 
{ 
    public $domains; 
    public $message = 'The email "%email%" has not a valid domain.'; 
} 


namespace AppBundle\Validator\Constraints; 

use Symfony\Component\Validator\Constraint; 
use Symfony\Component\Validator\ConstraintValidator; 

class EmailDomainValidator extends ConstraintValidator 
{ 
    public function validate($value, Constraint $constraint) 
    { 
     $explodedEmail = explode('@', $value); 
     $domain = array_pop($explodedEmail); 

     if (!in_array($domain, $constraint->domains)) { 
      $this->context->buildViolation($constraint->message) 
       ->setParameter('%email%', $value) 
       ->addViolation(); 
     } 
    } 
} 

新しいバリデータを使用することができます誰かがここに.ymlファイル内の検証を追加する必要がある場合には

use Symfony\Component\Validator\Constraints as Assert; 
use AppBundle\Validator\Constraints as CustomAssert; 

class MyEntity 
{ 
    /** 
    * @Assert\Email() 
    * @CustomAssert\EmailDomain(domains = {"yahoo.com", "gmail.com"}) 
    */ 
    protected $email; 

をあなたがそれを行うことができる方法であります。

- AppBundle\Validator\Constraints\EmailDomain: 
     domains: 
      - yahoo.com 
+0

のようなものを試すことができます。ありがとう、私はこれを見て、 – Saadia

+1

を取得します。検証のためにアノテーションを使用していないので、 '.yml'ファイル – Saadia

0

を持っている場合、人々が登録したいです。それ以外の場合は、独自の制約を作成する必要があります。

+0

この目的のためにRegexの制約をどのように使用できるかの例を教えてください。 – Saadia

+0

あなたは^ [a-zA-Z] + @(domain1 \ .com | domain2 \ .com |など)$ –

関連する問題