Метод createView класса Form
Метод createView класса Form создаёт объект класса FormView, который представляет собой готовую к выводу структуру формы для Twig-шаблона. Метод не принимает обязательных параметров. Обычно он вызывается автоматически через метод render контроллера или вручную в методе renderForm. Внутри FormView хранятся дочерние элементы формы, значения полей, ошибки валидации и метки. Именно этот объект передаётся в Twig под ключом form и используется для отрисовки через функции form_start, form_widget, form_row и другие.
Синтаксис
$form->createView(): FormView
Пример
Давайте создадим простую форму и получим её представление через createView:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormExtensionCoreTypeSubmitType;
use SymfonyComponentFormExtensionCoreTypeFormType;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class FormController extends AbstractController
{
#[Route('/form', name: 'form_index')]
public function index(): Response
{
$form = $this->createFormBuilder()
->add('name', TextType::class)
->add('send', SubmitType::class, ['label' => 'Save'])
->getForm();
$view = $form->createView();
return $this->render('form/index.html.twig', [
'form' => $view,
]);
}
}
?>
В Twig-шаблоне объект FormView отрисовывается через функции формы:
{{ form_start(form) }}
{{ form_row(form.name) }}
{{ form_row(form.send) }}
{{ form_end(form) }}
Результат выполнения кода:
<form name="form" method="post">
<div>
<label for="form_name">Name</label>
<input type="text" id="form_name" name="form[name]">
</div>
<div>
<button type="submit" id="form_send" name="form[send]">Save</button>
</div>
</form>
Пример
Давайте получим дочерние элементы из FormView и выведем их имена в контроллере:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormExtensionCoreTypeSubmitType;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class FormController extends AbstractController
{
#[Route('/form/children', name: 'form_children')]
public function children(): Response
{
$form = $this->createFormBuilder()
->add('name', TextType::class)
->add('send', SubmitType::class)
->getForm();
$view = $form->createView();
$res = [];
foreach ($view->children as $child) {
$res[] = $child->vars['name'];
}
return new Response(implode(', ', $res));
}
}
?>
Результат выполнения кода:
"name, send"
Смотрите также
-
класс
Form,
который представляет собой форму целиком -
метод
getData,
который возвращает данные формы -
метод
isValid,
который проверяет валидность формы -
метод
handleRequest,
который обрабатывает запрос формы