Видео также актуально для Symfony 5.
Итак, мы остановились на том, что у нас создан специальный класс для работы с формами TestFormType.php, который находится в папке Form. Этот класс содержит метод buildForm, который формирует структуру нашей формы:
<?php namespace App\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; class TestFormType extends AbstractType { public function buildForm( FormBuilderInterface $builder, array $options ) { //parent::buildForm( $builder, $options ); // TODO: Change the autogenerated stub } }
Внутри этого метода, как аргумент импортирован такой сервис, который называется FormBuilderInterface. Благодаря этому сервису, мы можем построить конструктив нашей формы.
Внутри сервиса $builder есть один основной метод, который мы будем использовать. Этот метод называется add. С его помощью мы добавляем те поля, которые будут в нашей форме.
Давайте с помощью этого сервиса добавим два поля в нушу форму.
public function buildForm( FormBuilderInterface $builder, array $options ) { $builder ->add('title') ->add('content') }
По сути, конструктив формы у нас уже готов.
Но, пока на данном этапе это всего-лишь описание конструктива нашей формы. Если мы хотим описание этого конструктива перенести внутрь нашего вида, мы с вами должны сделать это через контроллер.
Для того, чтобы нам отобразить внутри вида нашу форму нам нужно внутри контроллера сформировать эту самую форму, которую мы с вами создали из этого класса.
Задача - создать объект формы и передать его внутрь шаблонизатора Twig.
Для того, чтобы создать объект формы, мы создаем переменную $form внутрь которой разместим результат выполнения метода createForm. В качестве параметра этого метода нужно передать тот класс формы, который мы хотим расширять.
И теперь только остается передать внутрь шаблона Twig как параметр нашу форму.
class MainController extends AbstractController { ... /** * @Route("/main", name="main") */ public function index() { $form = $this->createForm(TestFormType::class); return $this->render('main/index.html.twig', [ 'form' => $form->createView() ]); } … }
Обратите внимание, что внутрь Twig шаблона передается не сама переменная $form, а метод createView, который подготовит объект с формой в формат понятный для шаблонизатора Twig.
Каким же образом теперь отобразить переданный объект внутри шаблона Twig?
Открываем файл шаблона main/index.html.twig и вставляем туда следующую конструкцию кода.
{{ form_start(form, {'attr': {'novalidate': 'novalidate'}}) }} {{ form_widget(form) }} <button type="submit" class="button">Отправить</button> {{ form_end(form) }}
form_start - это замена элементу <form>
form_end - замена элементу </form>
Параметр form соответствует той форме, которую мы передали из контроллера.
form_widget - выводит все поля, которые мы описали в классе формы. Вывод этих полей происходит в автоматическом режиме.
И элемент button - просто создает кнопку "Отправить", которая будет отправлять данные нашей формы.
Попробуйте тоже создать такой простой конструктив и отобразить форму у себя в шаблоне Twig.
Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:
Email - зарегистрироваться / войти
Или зарегистрируйтесь через социальные сети: