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

Класс FormBuilder

Класс FormBuilder - это основной инструмент для программного построения форм в Symfony. Он предоставляет набор методов для добавления полей, настройки их типов и параметров. Экземпляр класса создаётся через метод createBuilder фабрики форм или внутри контроллера с помощью createFormBuilder. Каждое поле описывается именем, типом и массивом опций. После добавления всех элементов вызывается метод getForm, возвращающий готовый объект формы.

Синтаксис

$builder = $this->createFormBuilder($data); $builder->add('name', TextType::class, ['label' => 'Name']); $form = $builder->getForm();

Пример

Давайте создадим простую форму с двумя полями - текстовым и числовым:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentFormExtensionCoreTypeTextType; use SymfonyComponentFormExtensionCoreTypeIntegerType; use SymfonyComponentFormExtensionCoreTypeSubmitType; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function index(): Response { $builder = $this->createFormBuilder(); $builder->add('title', TextType::class, ['label' => 'Title']); $builder->add('count', IntegerType::class, ['label' => 'Count']); $builder->add('save', SubmitType::class, ['label' => 'Save']); $form = $builder->getForm(); return $this->render('article/index.html.twig', [ 'form' => $form->createView(), ]); } } ?>

В шаблоне Twig выведем форму:

{{ form_start(form) }} {{ form_row(form.title) }} {{ form_row(form.count) }} {{ 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> <label for="form_count">Count</label> <input type="number" id="form_count" name="form[count]"> </div> <div> <button type="submit" id="form_save" name="form[save]">Save</button> </div> </form>

Пример

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

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentFormExtensionCoreTypeTextType; use SymfonyComponentFormExtensionCoreTypeIntegerType; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function index(): Response { $data = [ 'title' => 'hello', 'count' => 5, ]; $builder = $this->createFormBuilder($data); $builder->add('title', TextType::class); $builder->add('count', IntegerType::class); $form = $builder->getForm(); return $this->render('article/index.html.twig', [ 'form' => $form->createView(), ]); } } ?>

После рендеринга поля будут заполнены переданными значениями: в поле title появится строка 'hello', а в поле count - число 5.

<input type="text" id="form_title" name="form[title]" value="hello"> <input type="number" id="form_count" name="form[count]" value="5">

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

  • метод add,
    который добавляет поле в форму
  • метод getForm,
    который возвращает готовый объект формы
  • метод get,
    который возвращает дочерний элемент формы
  • метод remove,
    который удаляет поле из формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить