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

Метод normalize

Метод normalize класса Serializer преобразует объект или массив в массив скалярных значений (чисел, строк, булевых значений). Это промежуточный этап перед финальной сериализацией в JSON или XML. Метод принимает первым параметром данные для нормализации, вторым - формат (обычно 'json'), третьим - массив контекста с настройками.

Синтаксис

$serializer->normalize(mixed $data, ?string $format = null, array $context = []): mixed

Пример

Давайте нормализуем простой объект в массив:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Serializer\Serializer; use Symfony\Component\Serializer\Encoder\JsonEncoder; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(): Response { $encoders = [new JsonEncoder()]; $normalizers = [new ObjectNormalizer()]; $serializer = new Serializer($normalizers, $encoders); $user = new \stdClass(); $user->name = 'abcde'; $user->age = 25; $res = $serializer->normalize($user); return new Response(json_encode($res)); } } ?>

Результат выполнения кода:

{"name":"abcde","age":25}

Пример

Давайте нормализуем массив объектов:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Serializer\Serializer; use Symfony\Component\Serializer\Encoder\JsonEncoder; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; class ArticleController extends AbstractController { #[Route('/articles', name: 'article_list')] public function list(): Response { $encoders = [new JsonEncoder()]; $normalizers = [new ObjectNormalizer()]; $serializer = new Serializer($normalizers, $encoders); $item1 = new \stdClass(); $item1->title = 'article 1'; $item1->views = 100; $item2 = new \stdClass(); $item2->title = 'article 2'; $item2->views = 200; $res = $serializer->normalize([$item1, $item2]); return new Response(json_encode($res)); } } ?>

Результат выполнения кода:

[{"title":"article 1","views":100},{"title":"article 2","views":200}]

Пример

Давайте передадим контекст для группировки полей:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Serializer\Serializer; use Symfony\Component\Serializer\Encoder\JsonEncoder; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; use Symfony\Component\Serializer\Annotation\Groups; class User { #[Groups(['public'])] public string $name = 'abcde'; #[Groups(['private'])] public string $email = 'user@example.com'; } class ArticleController extends AbstractController { #[Route('/user', name: 'user_show')] public function show(): Response { $encoders = [new JsonEncoder()]; $normalizers = [new ObjectNormalizer()]; $serializer = new Serializer($normalizers, $encoders); $user = new User(); $res = $serializer->normalize($user, null, ['groups' => ['public']]); return new Response(json_encode($res)); } } ?>

Результат выполнения кода:

{"name":"abcde"}

Смотрите также

  • класс Serializer,
    который выполняет сериализацию данных
  • метод serialize,
    который преобразует данные в строку формата
  • метод deserialize,
    который восстанавливает объекты из строки
  • метод denormalize,
    который преобразует массив в объект
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить