我正在处理一份登记表,我需要在电子邮件id上进行验证,如果电子邮件域不属于特定的域,那么人就不能注册,所以我的问题是,在默认情况下,symfony是否有这个验证选项,我可以打开它,或者我需要创建一个自定义验证?
例如,如果电子邮件id有yahoo.com,我只希望人们注册
发布于 2016-04-06 13:42:27
不,在symfony2中没有检查域电子邮件的内置功能。但你可以加进去。你能做的就是创建自定义约束。
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.comhttps://stackoverflow.com/questions/36451825
复制相似问题