Метод getForm
Метод getForm класса FormBuilder возвращает объект формы,
который был собран на основе добавленных полей. Вызывается после того,
как через метод add были добавлены все необходимые поля.
Возвращаемый объект реализует интерфейс FormInterface
и может быть использован для отображения, обработки и валидации данных.
Синтаксис
public function getForm(): FormInterface
Пример
Давайте создадим форму с помощью FormBuilder и получим её объект:
<?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\IntegerType;
class ArticleController extends AbstractController
{
public function index(): Response
{
$builder = $this->createFormBuilder();
$builder->add('title', TextType::class);
$builder->add('price', IntegerType::class);
$form = $builder->getForm();
return new Response(get_class($form));
}
}
?>
Результат выполнения кода:
"Symfony\Component\Form\Form"
Пример
Давайте получим форму и отрендерим её в Twig-шаблоне:
<?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\SubmitType;
class ArticleController extends AbstractController
{
public function index(): Response
{
$builder = $this->createFormBuilder();
$builder->add('name', TextType::class);
$builder->add('save', SubmitType::class);
$form = $builder->getForm();
return $this->render('article/index.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
Twig-шаблон для вывода формы:
{{ form_start(form) }}
{{ form_row(form.name) }}
{{ form_row(form.save) }}
{{ form_end(form) }}
Пример
Давайте обработаем отправленные данные формы, полученной через getForm:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
class ArticleController extends AbstractController
{
public function index(Request $request): Response
{
$builder = $this->createFormBuilder();
$builder->add('title', TextType::class);
$builder->add('price', IntegerType::class);
$form = $builder->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
return new Response($data['title']);
}
return $this->render('article/index.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
Результат выполнения кода для отправленного поля title со значением 'abcde':
abcde
Смотрите также
-
класс
FormBuilder,
который строит объект формы -
метод
add,
который добавляет поле в форму -
метод
create,
который создаёт объект формы -
метод
get,
который возвращает добавленное поле