Метод create класса FormFactory
Метод create класса FormFactory создаёт форму и возвращает объект FormInterface.
Первым параметром передаётся класс типа формы, вторым - исходные данные для полей формы,
третьим - массив опций. Метод удобен, когда форму нужно построить программно,
не прибегая к методу createForm контроллера.
Синтаксис
<?php
public function create(
string $type,
mixed $data = null,
array $options = []
): FormInterface
?>
Пример
Давайте создадим простую форму через фабрику и выведем её HTML:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(FormFactoryInterface $factory): Response
{
$form = $factory->create('form', [
'name' => null,
]);
$form->add('name', TextType::class);
$form->add('save', SubmitType::class);
return $this->render('article/index.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
Пример
Давайте создадим форму с типом TextType и начальным значением:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(FormFactoryInterface $factory): Response
{
$form = $factory->create('form', [
'name' => 'abcde',
]);
$form->add('name', TextType::class);
$form->add('save', SubmitType::class);
return $this->render('article/index.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
Результат выполнения кода в виде HTML формы:
<form name="form" method="post">
<div>
<label for="form_name">Name</label>
<input type="text" id="form_name" name="form[name]" value="abcde">
</div>
<button type="submit" id="form_save" name="form[save]">Submit</button>
</form>
Смотрите также
-
класс
FormFactory,
который создаёт объекты форм -
метод
createBuilder,
который создаёт построитель формы -
метод
createNamed,
который создаёт форму с заданным именем -
метод
createView,
который возвращает представление формы для шаблона