Symfony - 限制特定域的注册

时间:2016-04-06 12:55:48

标签: php symfony symfony-validator

我正在处理一个注册表单,我需要对电子邮件ID进行验证,如果电子邮件域不属于某个特定域,则该人不应该注册,所以我的问题是symfony默认情况下这个验证选项,我可以打开或我需要创建自定义验证?

例如,我只希望人们注册,如果电子邮件ID为yahoo.com

2 个答案:

答案 0 :(得分: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();
        }
    }
}

之后,您可以使用新的验证器:

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;

如果有人需要在.yml文件中添加验证,您可以在此处进行验证。

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

答案 1 :(得分:0)

您可以使用Regex constraint来测试多个电子邮件域的电子邮件地址。在其他情况下,您将必须创建自己的约束。