2016-04-06 14 views
0

E-postanın kimliği belirli bir alana ait değilse, e-posta kimliğindeki bir doğrulama koymam gereken bir kayıt formu üzerinde çalışıyorum. Kişinin bu soruya yanıt vermemesi gerekir varsayılan olarak symfony, açabileceğim ya da özel bir doğrulama oluşturmam gereken bu doğrulama seçeneğine sahip mi? e-posta kimliği yahoo.comSymfony - Belirli alan adından kaydını durdurma

+0

Eğer e-postanın etki bahsediyoruz, soruyu düzenlemek düşünün, "e-posta id" öneri için MarianoArgañaraz sayesinde @ –

+0

diye bir şey olduğunu. – Saadia

cevap

2

Hayır, etki alanı e-postası için symfony2'de yerleşik bir özellik yok. Ama ekleyebilirsin. Yapabilecekleriniz creating a custom constraint. Yeni doğrulayıcı kullanabilirsiniz Bundan sonra

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(); 
     } 
    } 
} 

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.'; 
} 

: Birisi ihtiyacı

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; 

durumda

burada .yml dosyası içinde doğrulama eklemek için bunu yapabilirsiniz nasıl .

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

Teşekkürler, ben buna bakıyorum ve geri dönecek – Saadia

+1

bu validaşı nasıl ekleyebilirim? doğrulama için ek açıklama kullanmadığım için bir '.yml 'dosyası – Saadia

0

varsa

Örneğin sadece Birkaç e-posta etki alanları için e-posta adresini test etmek Regex constraint kullanabilirsiniz insanlar kayıt olmak istiyorum. Diğer durumda kendi kısıtınızı yaratmak zorunda kalacaksınız.

+0

Regex kısıtlamasının bu amaç için nasıl kullanılabileceği konusunda bana bir örnek verebilir misiniz? – Saadia

+0

^[a-zA-Z] + @ (domain1 \ .com | domain2 \ .com | etc) gibi bir şeyi deneyebilirsiniz. –