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

Метод createForm

Метод createForm принадлежит классу AbstractController и позволяет быстро создать объект формы прямо в контроллере. Первым параметром передаётся класс типа формы (например, ArticleType), вторым - данные, которые нужно заполнить в форму (обычно сущность). Третьим параметром можно передать массив опций формы. Метод возвращает объект FormInterface, готовый к обработке запроса и рендерингу.

Синтаксис

$this->createForm(string $type, mixed $data = null, array $options = []): FormInterface

Пример

Давайте создадим простую форму для сущности Article и отрендерим её в шаблоне:

<?php namespace App\Controller; use App\Entity\Article; use App\Form\ArticleType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/new', name: 'article_new')] public function new(): Response { $article = new Article(); $form = $this->createForm(ArticleType::class, $article); return $this->render('article/new.html.twig', [ 'form' => $form, ]); } } ?>

Результат выполнения кода - объект формы, переданный в шаблон:

{{ form_start(form) }} {{ form_widget(form) }} <button type="submit">Save</button> {{ form_end(form) }}

Пример

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

<?php namespace App\Controller; use App\Entity\Article; use App\Form\ArticleType; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/new', name: 'article_new')] public function new(Request $request, EntityManagerInterface $em): Response { $article = new Article(); $form = $this->createForm(ArticleType::class, $article); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $em->persist($article); $em->flush(); return $this->redirectToRoute('article_new'); } return $this->render('article/new.html.twig', [ 'form' => $form, ]); } } ?>

Результат выполнения кода после успешной отправки формы - перенаправление на тот же маршрут:

Redirect to /article/new

Пример

Давайте передадим дополнительные опции в форму через третий параметр:

<?php namespace App\Controller; use App\Entity\Article; use App\Form\ArticleType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/edit', name: 'article_edit')] public function edit(): Response { $article = new Article(); $form = $this->createForm(ArticleType::class, $article, [ 'action' => $this->generateUrl('article_new'), 'method' => 'POST', ]); return $this->render('article/edit.html.twig', [ 'form' => $form, ]); } } ?>

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

<form action="/article/new" method="POST">

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

  • класс AbstractController,
    который даёт доступ к методу createForm
  • метод createFormBuilder,
    который создаёт форму без отдельного класса типа
  • метод render,
    который рендерит шаблон с переданной формой
  • метод redirectToRoute,
    который перенаправляет после успешной отправки формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить