Правило Email
Правило Email вешается на поле формы и проверяет,
что введённое значение является корректным email-адресом.
Правило можно использовать как в виде атрибута для сущности,
так и в опциях поля формы. При нарушении правила
форма считается невалидной, а пользователю показывается
сообщение об ошибке.
Синтаксис
#[Email(
message: 'текст ошибки',
mode: 'html5' | 'strict' | 'loose',
normalizer: callable,
)]
Пример
Давайте создадим сущность с полем email и повесим
на него правило Email:
<?php
namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class User
{
#[Assert\Email(
message: 'The email {{ value }} is not a valid email.',
)]
private string $email = '';
public function getEmail(): string
{
return $this->email;
}
public function setEmail(string $email): void
{
$this->email = $email;
}
}
?>
Пример
Давайте создадим форму на основе этой сущности и проверим
значение поля email:
<?php
namespace App\Controller;
use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Request;
class UserController extends AbstractController
{
public function create(Request $request): Response
{
$user = new User();
$form = $this->createFormBuilder($user)
->add('email', EmailType::class)
->add('save', SubmitType::class)
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
return new Response('email is valid');
}
return $this->render('user/create.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
Пример
Давайте проверим значение поля email вручную
с помощью валидатора:
<?php
namespace App\Controller;
use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class UserController extends AbstractController
{
public function check(ValidatorInterface $validator): Response
{
$user = new User();
$user->setEmail('abcde');
$errors = $validator->validate($user);
if (count($errors) > 0) {
return new Response((string) $errors);
}
return new Response('email is valid');
}
}
?>
Результат выполнения кода для значения 'abcde':
Object(App\Entity\User).email: The email "abcde" is not a valid email.
Пример
Давайте укажем режим проверки mode со значением
'strict':
<?php
namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class User
{
#[Assert\Email(
message: 'The email {{ value }} is not a valid email.',
mode: 'strict',
)]
private string $email = '';
public function getEmail(): string
{
return $this->email;
}
public function setEmail(string $email): void
{
$this->email = $email;
}
}
?>
Результат выполнения кода для значения 'user@localhost'
в строгом режиме:
Object(App\Entity\User).email: The email "user@localhost" is not a valid email.