Метод createNamedBuilder класса FormFactory
Метод createNamedBuilder класса FormFactory создаёт
построитель формы (экземпляр FormBuilderInterface)
с указанным именем и типом. Первым параметром
передаётся имя формы, вторым - класс типа формы,
третьим - начальные данные, четвёртым - массив опций.
В отличие от метода createBuilder, здесь имя формы
задаётся явно, что удобно при работе с несколькими
формами на одной странице.
Синтаксис
public function createNamedBuilder(
string $name,
string $type = FormType::class,
mixed $data = null,
array $options = []
): FormBuilderInterface
Пример
Давайте создадим построитель формы с именем 'article'
и типом FormType:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\FormFactoryInterface;
class ArticleController extends AbstractController
{
public function index(FormFactoryInterface $factory): Response
{
$builder = $factory->createNamedBuilder(
'article',
FormType::class
);
return new Response($builder->getName());
}
}
?>
Результат выполнения кода:
"article"
Пример
Давайте передадим начальные данные в форму через третий параметр метода:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\FormFactoryInterface;
class ArticleController extends AbstractController
{
public function index(FormFactoryInterface $factory): Response
{
$builder = $factory->createNamedBuilder(
'article',
FormType::class,
['title' => 'abcde']
);
$builder->add('title', TextType::class);
$form = $builder->getForm();
$data = $form->getData();
return new Response($data['title']);
}
}
?>
Результат выполнения кода:
"abcde"
Пример
Давайте передадим опции формы через четвёртый параметр метода:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\FormFactoryInterface;
class ArticleController extends AbstractController
{
public function index(FormFactoryInterface $factory): Response
{
$builder = $factory->createNamedBuilder(
'article',
FormType::class,
null,
[
'action' => '/article',
'method' => 'POST'
]
);
$builder->add('title', TextType::class);
$form = $builder->getForm();
return new Response($form->getConfig()->getAction());
}
}
?>
Результат выполнения кода:
"/article"
Смотрите также
-
метод
createBuilder,
который создаёт построитель формы без имени -
метод
create,
который создаёт готовую форму -
класс
FormFactory,
который создаёт формы и их построители -
тип
FormType,
который является базовым типом формы