РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
359 of 1361 menu

Правило Locale

Правило Locale относится к группе ограничений валидации формы. Оно вешается на поле формы и проверяет, что введённое значение является допустимым кодом локали (например, 'ru', 'en', 'fr_FR'). Правило принимает значение null или массив дополнительных параметров через именованные аргументы.

Синтаксис

new Locale()

Пример

Давайте создадим форму с полем locale и навесим на него правило Locale:

<?php namespace AppForm; use SymfonyComponentFormAbstractType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentFormExtensionValidatorConstraintsLocale; use SymfonyComponentOptionsResolverOptionsResolver; use SymfonyComponentFormExtensionCoreTypeTextType; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder->add('locale', TextType::class, [ 'constraints' => [ new Locale(), ], ]); } public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'data_class' => null, ]); } } ?>

Теперь создадим контроллер, который обрабатывает форму и выводит результат валидации:

<?php namespace AppController; use AppFormArticleType; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article', name: 'article_form')] public function index(Request $request): Response { $form = $this->createForm(ArticleType::class); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { return new Response('form is valid'); } return $this->render('article/index.html.twig', [ 'form' => $form->createView(), ]); } } ?>

Создадим Twig-шаблон для вывода формы:

{{ form_start(form) }} {{ form_row(form.locale) }} <button type="submit">Send</button> {{ form_end(form) }}

Результат выполнения кода при отправке значения 'ru':

"form is valid"

Пример

Давайте отправим некорректное значение 'xyz' и получим ошибку валидации:

<?php namespace AppController; use AppFormArticleType; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article', name: 'article_form')] public function index(Request $request): Response { $form = $this->createForm(ArticleType::class); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { return new Response('form is valid'); } if ($form->isSubmitted()) { $errors = $form->get('locale')->getErrors(); return new Response($errors[0]->getMessage()); } return $this->render('article/index.html.twig', [ 'form' => $form->createView(), ]); } } ?>

Результат выполнения кода при отправке значения 'xyz':

"This value is not a valid locale."

Пример

Давайте используем правило Locale вместе с сущностью и другими ограничениями:

<?php namespace AppEntity; use SymfonyComponentValidatorConstraintsLocale; use SymfonyComponentValidatorConstraintsNotBlank; class Article { #[NotBlank] #[Locale] private string $locale = ''; public function getLocale(): string { return $this->locale; } public function setLocale(string $locale): void { $this->locale = $locale; } } ?>

Создадим форму для этой сущности:

<?php namespace AppForm; use AppEntityArticle; use SymfonyComponentFormAbstractType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentOptionsResolverOptionsResolver; use SymfonyComponentFormExtensionCoreTypeTextType; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder->add('locale', TextType::class); } public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'data_class' => Article::class, ]); } } ?>

Результат выполнения кода при отправке значения 'fr_FR':

"form is valid"

Смотрите также

  • правило Language,
    которое проверяет код языка
  • правило Country,
    которое проверяет код страны
  • правило Timezone,
    которое проверяет временную зону
  • правило Currency,
    которое проверяет код валюты
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить