Symfony — ограничить регистрацию с определенного домена

Я работаю над регистрационной формой, в которой мне нужно поставить валидацию для идентификатора электронной почты. Если домен электронной почты не принадлежит конкретному домену, то человек не должен иметь возможности зарегистрироваться, поэтому у меня вопрос: есть ли у Symfony по умолчанию опция проверки, которая Я могу включить или мне нужно создать собственную проверку?

Например, я хочу, чтобы люди регистрировались только при наличии идентификатора электронной почты. yahoo.com

0

Решение

Нет, в 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.com
2

Другие решения

Ты можешь использовать Ограничение регулярных выражений проверить адрес электронной почты для нескольких доменов электронной почты. В другом случае вам придется создать собственное ограничение.

0

По вопросам рекламы [email protected]