Метод getViewData класса Form
Метод getViewData класса Form возвращает данные формы
в нормализованном для отображения виде. В отличие от метода
getData, который возвращает исходные данные модели,
getViewData приводит их к формату, пригодному для вывода
в шаблоне - например, объект DateTime превращается
в строку, а сущность - в её идентификатор или строковое
представление.
Метод не принимает параметров и возвращает значение типа
mixed - то, что будет доступно в Twig через переменную
form.vars.value. Метод удобно использовать, когда нужно
получить именно отображаемое значение поля, а не его
внутреннее представление.
Синтаксис
$form->getViewData();
Пример
Давайте создадим форму с текстовым полем и получим
отображаемое значение через метод getViewData:
<?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\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class FormController extends AbstractController
{
#[Route('/form', name: 'form_index')]
public function index(): Response
{
$form = $this->createFormBuilder(['name' => 'abcde'])
->add('name', TextType::class)
->add('save', SubmitType::class)
->getForm();
$viewData = $form->get('name')->getViewData();
return new Response(var_export($viewData, true));
}
}
?>
Результат выполнения кода:
'abcde'
Пример
Давайте посмотрим, как метод getViewData преобразует
объект DateTime в строку, пригодную для вывода:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class FormController extends AbstractController
{
#[Route('/form-date', name: 'form_date')]
public function date(): Response
{
$form = $this->createFormBuilder([
'createdAt' => new \DateTime('2024-01-15'),
])
->add('createdAt', DateType::class, [
'widget' => 'single_text',
])
->add('save', SubmitType::class)
->getForm();
$viewData = $form->get('createdAt')->getViewData();
return new Response(var_export($viewData, true));
}
}
?>
Результат выполнения кода:
'2024-01-15'
Пример
Давайте выведем значение getViewData прямо в Twig-шаблоне
через переменную form.vars.value:
<?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\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class FormController extends AbstractController
{
#[Route('/form-twig', name: 'form_twig')]
public function twig(): Response
{
$form = $this->createFormBuilder(['name' => 'hello'])
->add('name', TextType::class)
->add('save', SubmitType::class)
->getForm();
return $this->render('form/index.html.twig', [
'form' => $form,
]);
}
}
?>
Теперь выведем отображаемое значение поля в шаблоне:
<p>{{ form.name.vars.value }}</p>
Результат выполнения кода:
<p>hello</p>
Смотрите также
-
метод
getData,
который возвращает исходные данные формы -
метод
getNormData,
который возвращает нормализованные данные формы -
метод
createView,
который создаёт представление формы для шаблона -
класс
Form,
который представляет форму в Symfony