Метод createFormBuilder
Метод createFormBuilder принадлежит классу AbstractController и возвращает объект FormBuilderInterface. Он позволяет быстро создать форму прямо в контроллере без необходимости создавать отдельный класс формы. Первым параметром передаётся объект сущности, с которой будет связана форма, вторым - массив опций. После настройки формы вызывается метод getForm.
Синтаксис
$form = $this->createFormBuilder($data, $options);
Пример
Давайте создадим простую форму с одним текстовым полем:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/create', name: 'article_create')]
public function create(): Response
{
$form = $this->createFormBuilder()
->add('title')
->getForm();
return $this->render('article/create.html.twig', [
'form' => $form
]);
}
}
?>
Результат выполнения кода для Twig-шаблона:
<form name="form">
<div>
<label for="form_title">Title</label>
<input type="text" id="form_title" name="form[title]">
</div>
</form>
Пример
Давайте передадим сущность и настроим поля формы:
<?php
namespace App\Controller;
use App\Entity\Article;
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): Response
{
$article = new Article();
$form = $this->createFormBuilder($article)
->add('title')
->add('text')
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
return new Response('form valid');
}
return $this->render('article/new.html.twig', [
'form' => $form
]);
}
}
?>
Результат выполнения кода после отправки формы:
"form valid"
Смотрите также
-
класс
AbstractController,
который является базовым для контроллеров -
метод
createForm,
который создаёт форму из класса -
метод
render,
который рендерит Twig-шаблон -
метод
redirectToRoute,
который выполняет редирект на маршрут