РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
302 of 1361 menu

Метод 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,
    который проверяет валидность отправленной формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить