Правило Country
Правило Country используется в компоненте
валидации форм Symfony и проверяет, что переданное
значение является корректным кодом страны. Первым
параметром можно передать сообщение об ошибке,
которое будет показано пользователю при неудачной
проверке.
Синтаксис
#[Country(message: 'error message')]
Пример
Давайте создадим форму с полем country и
повесим на него правило Country:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\Country;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('country', TextType::class, [
'constraints' => [
new Country(),
],
]);
}
}
?>
Если пользователь введёт корректный код страны,
например 'US', форма пройдёт валидацию.
Если ввести некорректный код, например 'XX',
валидация завершится ошибкой.
Пример
Давайте обработаем форму в контроллере и выведем результат валидации:
<?php
namespace App\Controller;
use App\Form\ArticleType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(Request $request): Response
{
$form = $this->createForm(ArticleType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
return new Response($data['country']);
}
return $this->render('article/index.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
Результат выполнения кода при вводе 'US':
US
Пример
Давайте зададим собственное сообщение об ошибке
для правила Country:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\Country;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('country', TextType::class, [
'constraints' => [
new Country([
'message' => 'Please enter a valid country code.',
]),
],
]);
}
}
?>
Теперь при вводе некорректного кода пользователь
увидит сообщение 'Please enter a valid country
code.'.