Метод getNormData
Метод getNormData класса Form возвращает нормализованные данные формы.
Нормализованные данные - это промежуточный слой между данными представления
(то, что видит пользователь в полях формы) и моделью данных (объект, с которым
работает приложение). Метод не принимает параметров и возвращает значение
типа mixed: это может быть объект, массив или скалярное значение.
Нормализация выполняется через трансформеры данных, привязанные к полям формы.
Например, для поля типа DateType пользователь вводит строку '2026-09-14',
нормализованные данные будут объектом DateTime, а данные модели -
тем, что ожидает сущность. Метод getNormData возвращает именно
результат работы трансформеров до записи в модель.
Синтаксис
public function getNormData(): mixed
Пример
Давайте создадим простую форму с полем TextType и получим
нормализованные данные через метод getNormData:
<?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
{
$form = $this->createFormBuilder()
->add('title', TextType::class)
->add('save', SubmitType::class)
->getForm();
$res = $form->getNormData();
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода до отправки формы:
["title" => null]
Пример
Давайте обработаем отправленную форму и посмотрим, как изменятся нормализованные данные:
<?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\SubmitType;
class ArticleController extends AbstractController
{
public function index(Request $request): Response
{
$form = $this->createFormBuilder()
->add('title', TextType::class)
->add('save', SubmitType::class)
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$res = $form->getNormData();
return new Response(var_export($res, true));
}
return $this->render('article/index.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
Результат выполнения кода после отправки формы со значением 'abcde':
["title" => "abcde"]
Пример
Давайте разберём разницу между нормализованными данными и данными модели
на примере поля DateType. Пользователь вводит строку, а нормализованные
данные становятся объектом DateTime:
<?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\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class ArticleController extends AbstractController
{
public function index(Request $request): Response
{
$form = $this->createFormBuilder()
->add('publishedAt', DateType::class, [
'widget' => 'single_text',
])
->add('save', SubmitType::class)
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$norm = $form->getNormData();
$data = $form->getData();
$res = [
'norm_class' => get_class($norm['publishedAt']),
'data_class' => get_class($data['publishedAt']),
];
return new Response(var_export($res, true));
}
return $this->render('article/index.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
Результат выполнения кода после отправки формы:
["norm_class" => "DateTime", "data_class" => "DateTime"]
Пример
Давайте получим нормализованные данные отдельного поля формы
через метод get и цепочку getNormData:
<?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;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class ArticleController extends AbstractController
{
public function index(Request $request): Response
{
$form = $this->createFormBuilder()
->add('title', TextType::class)
->add('count', IntegerType::class)
->add('save', SubmitType::class)
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$titleNorm = $form->get('title')->getNormData();
$countNorm = $form->get('count')->getNormData();
$res = [
'title' => $titleNorm,
'count' => $countNorm,
];
return new Response(var_export($res, true));
}
return $this->render('article/index.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
Результат выполнения кода после отправки формы со значениями
'article' и '5':
["title" => "article", "count" => 5]
Смотрите также
-
метод
getData,
который возвращает данные модели формы -
метод
getViewData,
который возвращает данные представления формы -
метод
setData,
который устанавливает данные модели формы -
метод
isValid,
который проверяет валидность отправленной формы