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

Класс Form

Класс Form - это центральный объект при работе с формами в Symfony. Он создаётся через FormFactory или с помощью метода createForm в контроллере. Объект формы хранит в себе дочерние поля, данные, привязанные к полям, ошибки валидации и конфигурацию. Класс Form реализует интерфейс FormInterface и предоставляет методы для обработки запроса, проверки валидности, получения данных и рендеринга представления. Первым параметром при создании формы обычно передаётся тип формы (например, FormType), вторым - начальные данные, третьим - массив опций.

Синтаксис

<?php $form = $this->createForm(FormType::class, $data, $options); ?>

Пример

Давайте создадим простую форму с одним текстовым полем и выведем её в Twig-шаблоне:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentFormExtensionCoreTypeTextType; use SymfonyComponentFormExtensionCoreTypeSubmitType; use SymfonyComponentFormExtensionCoreTypeFormType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/form', name: 'article_form')] public function form(): Response { $form = $this->createFormBuilder() ->add('title', TextType::class) ->add('save', SubmitType::class, ['label' => 'Create']) ->getForm(); return $this->render('article/form.html.twig', [ 'form' => $form->createView(), ]); } } ?>

Файл Twig-шаблона:

{{ form_start(form) }} {{ form_row(form.title) }} {{ form_row(form.save) }} {{ form_end(form) }}

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

<form name="form" method="post"> <div><label for="form_title">Title</label><input type="text" id="form_title" name="form[title]" /></div> <div><button type="submit" id="form_save" name="form[save]">Create</button></div> </form>

Пример

Давайте обработаем отправку формы и проверим её валидность:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentFormExtensionCoreTypeTextType; use SymfonyComponentFormExtensionCoreTypeSubmitType; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/form', name: 'article_form')] public function form(Request $request): Response { $form = $this->createFormBuilder() ->add('title', TextType::class) ->add('save', SubmitType::class, ['label' => 'Create']) ->getForm(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $data = $form->getData(); return new Response('Form is valid. Title: ' . $data['title']); } return $this->render('article/form.html.twig', [ 'form' => $form->createView(), ]); } } ?>

Результат выполнения кода после отправки формы с заголовком 'abcde':

"Form is valid. Title: abcde"

Пример

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

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentFormExtensionCoreTypeTextType; use SymfonyComponentFormExtensionCoreTypeIntegerType; use SymfonyComponentFormExtensionCoreTypeFormType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/form-data', name: 'article_form_data')] public function formData(): Response { $form = $this->createFormBuilder() ->add('title', TextType::class, ['data' => 'article']) ->add('count', IntegerType::class, ['data' => 5]) ->getForm(); $data = $form->getData(); return new Response(json_encode($data)); } } ?>

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

{"title":"article","count":5}

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

  • метод handleRequest,
    который обрабатывает HTTP-запрос и заполняет форму данными
  • метод isValid,
    который проверяет валидность отправленной формы
  • метод getData,
    который возвращает данные, привязанные к форме
  • класс FormFactory,
    который создаёт объекты форм
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить