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

Правило Choice

Правило Choice вешается на поле формы и проверяет, что переданное значение входит в заданный список вариантов. Первым параметром передаётся массив допустимых значений. Вторым параметром можно указать настройки: message для текста ошибки, multiple для разрешения нескольких значений, min и max для ограничения количества выбранных элементов. Если значение не входит в список, форма считается невалидной.

Синтаксис

Choice(choices, options)

Пример

Давайте создадим форму с полем color и навесим на него правило Choice со списком допустимых значений:

<?php namespace AppForm; use SymfonyComponentFormAbstractType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentFormExtensionCoreTypeChoiceType; use SymfonyComponentValidatorConstraintsChoice; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder->add('color', ChoiceType::class, [ 'choices' => [ 'Red' => 'red', 'Green' => 'green', 'Blue' => 'blue', ], 'constraints' => [ new Choice([ 'choices' => ['red', 'green', 'blue'], 'message' => 'Choose a valid color.', ]), ], ]); } 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 form(Request $request): Response { $form = $this->createForm(ArticleType::class); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $res = $form->getData(); return new Response('color: ' . $res['color']); } return $this->render('article/form.html.twig', [ 'form' => $form->createView(), ]); } } ?>

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

"color: red"

Пример

Давайте разрешим выбирать несколько значений сразу с помощью опции multiple и ограничим их количество опциями min и max:

<?php namespace AppForm; use SymfonyComponentFormAbstractType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentFormExtensionCoreTypeChoiceType; use SymfonyComponentValidatorConstraintsChoice; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder->add('tags', ChoiceType::class, [ 'choices' => [ 'One' => 'one', 'Two' => 'two', 'Three' => 'three', 'Four' => 'four', ], 'multiple' => true, 'constraints' => [ new Choice([ 'choices' => ['one', 'two', 'three', 'four'], 'multiple' => true, 'min' => 1, 'max' => 2, 'minMessage' => 'Choose at least {{ limit }} tag.', 'maxMessage' => 'Choose at most {{ limit }} tags.', ]), ], ]); } 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 form(Request $request): Response { $form = $this->createForm(ArticleType::class); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $res = $form->getData(); return new Response(implode(', ', $res['tags'])); } return $this->render('article/form.html.twig', [ 'form' => $form->createView(), ]); } } ?>

Результат выполнения кода для значений ['one', 'three']:

"one, three"

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

  • класс Form,
    который представляет форму в Symfony
  • метод isValid,
    который проверяет валидность формы
  • правило Choice,
    которое проверяет значение по списку вариантов
  • тип ChoiceType,
    который создаёт поле выбора в форме
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить