Метод createNamed
Метод createNamed класса FormFactory создаёт форму
и позволяет явно задать её имя. Первым параметром передаётся
имя формы, вторым - класс типа формы, третьим - начальные
данные, четвёртым - массив опций. Имя формы важно для
корректной обработки запроса и привязки полей.
Синтаксис
createNamed(string $name, string $type, mixed $data = null, array $options = []): FormInterface
Пример
Давайте создадим форму с именем 'article' через метод createNamed:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormFormFactoryInterface;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_form')]
public function form(FormFactoryInterface $factory): Response
{
$form = $factory->createNamed('article', TextType::class, null, [
'label' => 'Article title',
]);
return new Response($form->getName());
}
}
?>
Результат выполнения кода:
"article"
Пример
Давайте создадим форму с именем 'article' и выведем её в шаблоне:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormFormFactoryInterface;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_form')]
public function form(FormFactoryInterface $factory): Response
{
$form = $factory->createNamed('article', TextType::class, null, [
'label' => 'Article title',
]);
return $this->render('article/form.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
Содержимое Twig-шаблона:
{{ form_start(form) }}
{{ form_widget(form) }}
<button type="submit">Send</button>
{{ form_end(form) }}
Результат выполнения кода:
<form name="article" method="post">
<div>
<label for="article">Article title</label>
<input type="text" id="article" name="article" />
</div>
<button type="submit">Send</button>
</form>
Смотрите также
-
класс
FormFactory,
который создаёт формы в Symfony -
метод
create,
который создаёт форму без явного имени -
метод
createBuilder,
который создаёт построитель формы -
метод
createNamedBuilder,
который создаёт построитель формы с именем