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

Класс FormFactory

Класс FormFactory отвечает за создание форм в Symfony. Он получает тип формы первым параметром, данные формы вторым параметром и массив опций третьим параметром. Сервис FormFactory доступен через контейнер и используется внутри AbstractController через метод createForm. Класс предоставляет методы create, createBuilder, createNamed и createNamedBuilder.

Синтаксис

use Symfony\Component\Form\FormFactoryInterface; $factory->create(string $type, mixed $data = null, array $options = []): FormInterface $factory->createBuilder(string $type, mixed $data = null, array $options = []): FormBuilderInterface $factory->createNamed(string $name, string $type, mixed $data = null, array $options = []): FormInterface $factory->createNamedBuilder(string $name, string $type, mixed $data = null, array $options = []): FormBuilderInterface

Пример

Давайте создадим простую форму через метод create:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; class FormController extends AbstractController { public function index(): Response { $form = $this->createFormBuilder() ->add('name', TextType::class) ->add('save', SubmitType::class) ->getForm(); return $this->render('form/index.html.twig', [ 'form' => $form->createView(), ]); } } ?>

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

<form name="form"> <div> <label for="form_name">Name</label> <input type="text" id="form_name" name="form[name]"> </div> <div> <button type="submit" id="form_save" name="form[save]">Save</button> </div> </form>

Пример

Давайте создадим форму через метод create с готовым типом:

<?php namespace App\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\FormBuilderInterface; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add('title', TextType::class) ->add('save', SubmitType::class); } } ?>

Теперь создадим эту форму в контроллере:

<?php namespace App\Controller; use App\Form\ArticleType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class FormController extends AbstractController { public function index(): Response { $form = $this->createForm(ArticleType::class); return $this->render('form/index.html.twig', [ 'form' => $form->createView(), ]); } } ?>

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

<form name="article"> <div> <label for="article_title">Title</label> <input type="text" id="article_title" name="article[title]"> </div> <div> <button type="submit" id="article_save" name="article[save]">Save</button> </div> </form>

Пример

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

<?php namespace App\Controller; use App\Form\ArticleType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class FormController extends AbstractController { public function index(): Response { $form = $this->get('form.factory')->createNamed('custom', ArticleType::class); return $this->render('form/index.html.twig', [ 'form' => $form->createView(), ]); } } ?>

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

<form name="custom"> <div> <label for="custom_title">Title</label> <input type="text" id="custom_title" name="custom[title]"> </div> <div> <button type="submit" id="custom_save" name="custom[save]">Save</button> </div> </form>

Пример

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

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\IntegerType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; class FormController extends AbstractController { public function index(): Response { $builder = $this->container->get('form.factory') ->createBuilder(null, ['title' => 'abcde', 'count' => 5]); $builder->add('title', TextType::class); $builder->add('count', IntegerType::class); $builder->add('save', SubmitType::class); $form = $builder->getForm(); return $this->render('form/index.html.twig', [ 'form' => $form->createView(), ]); } } ?>

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

<form name="form"> <div> <label for="form_title">Title</label> <input type="text" id="form_title" name="form[title]" value="abcde"> </div> <div> <label for="form_count">Count</label> <input type="number" id="form_count" name="form[count]" value="5"> </div> <div> <button type="submit" id="form_save" name="form[save]">Save</button> </div> </form>

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

  • класс Form,
    который представляет готовую форму
  • метод createView,
    который создаёт представление формы для Twig
  • метод handleRequest,
    который обрабатывает отправленные данные формы
  • класс FormFactory,
    который создаёт формы и строители форм
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить