首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony -限制特定域的注册

Symfony -限制特定域的注册
EN

Stack Overflow用户
提问于 2016-04-06 12:55:47
回答 2查看 1.2K关注 0票数 0

我正在处理一份登记表,我需要在电子邮件id上进行验证,如果电子邮件域不属于特定的域,那么人就不能注册,所以我的问题是,在默认情况下,symfony是否有这个验证选项,我可以打开它,或者我需要创建一个自定义验证?

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

EN

Stack Overflow用户

回答已采纳

发布于 2016-04-06 13:42:27

不,在symfony2中没有检查域电子邮件的内置功能。但你可以加进去。你能做的就是创建自定义约束

代码语言:javascript
复制
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.';
}
代码语言:javascript
复制
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();
        }
    }
}

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

代码语言:javascript
复制
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文件中添加验证,这里是如何做到的。

代码语言:javascript
复制
    - AppBundle\Validator\Constraints\EmailDomain:
        domains:
            - yahoo.com
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36451825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档