Метод setData класса Form
Метод setData класса Form устанавливает данные в форму. Первым параметром передаётся значение, которое нужно записать в форму. Метод используется для предзаполнения формы данными перед её отображением, а также для изменения данных формы после её создания. Метод возвращает объект формы, что позволяет использовать цепочку вызовов.
Синтаксис
$form->setData($data);
Параметр $data может быть массивом, объектом или скалярным значением. Тип данных зависит от типа формы. Для формы, связанной с сущностью, передаётся объект сущности. Для простой формы - массив или скалярное значение.
Пример
Давайте создадим форму и установим в неё данные с помощью метода setData:
<?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;
class ArticleController extends AbstractController
{
public function index(): Response
{
$form = $this->createFormBuilder()
->add('title', TextType::class)
->add('content', TextType::class)
->getForm();
$form->setData([
'title' => 'article',
'content' => 'hello',
]);
return $this->render('article/index.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
В результате форма будет предзаполнена значениями 'article' и 'hello'.
Пример
Давайте установим данные в форму, связанную с сущностью:
<?php
namespace App\Controller;
use App\Entity\Article;
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;
class ArticleController extends AbstractController
{
public function index(): Response
{
$article = new Article();
$article->setTitle('article');
$article->setContent('hello');
$form = $this->createFormBuilder($article)
->add('title', TextType::class)
->add('content', TextType::class)
->getForm();
$form->setData($article);
return $this->render('article/index.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
В результате форма будет предзаполнена данными из объекта Article.
Пример
Давайте изменим данные формы после её отправки:
<?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\FormType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class ArticleController extends AbstractController
{
public function index(Request $request): Response
{
$form = $this->createFormBuilder()
->add('title', TextType::class)
->add('content', TextType::class)
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$form->setData([
'title' => 'user',
'content' => 'abcde',
]);
}
return $this->render('article/index.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
В результате после успешной отправки формы данные будут заменены на 'user' и 'abcde'.
Смотрите также
-
класс
Form,
который представляет форму в Symfony -
метод
getData,
который возвращает данные формы -
метод
handleRequest,
который обрабатывает запрос и заполняет форму -
метод
createView,
который создаёт представление формы для Twig