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

Класс Serializer

Класс Serializer является центральным компонентом Symfony для преобразования данных. Он умеет превращать объекты в массивы и JSON, а также выполнять обратное преобразование. Внутри себя класс использует нормализаторы и энкодеры. Нормализаторы отвечают за преобразование объектов в массивы, а энкодеры кодируют массивы в нужный формат (JSON, XML, CSV).

Класс реализует интерфейс SerializerInterface и доступен через сервис serializer. Основные методы: serialize для превращения объекта в строку нужного формата, deserialize для восстановления объекта из строки, normalize для получения массива из объекта и denormalize для сборки объекта из массива.

Синтаксис

use SymfonyComponentSerializerSerializer; $serializer = new Serializer($normalizers, $encoders);

Первым параметром передаётся массив нормализаторов, вторым - массив энкодеров. Обычно объект не создают вручную, а получают через внедрение зависимости SerializerInterface.

Пример

Давайте создадим класс Article и сериализуем его в JSON:

<?php namespace AppEntity; class Article { public string $title = ''; public text $body = ''; public integer $views = 0; public boolean $published = false; } ?>
<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentSerializerSerializerInterface; class ArticleController extends AbstractController { public function index(SerializerInterface $serializer): Response { $article = new Article(); $article->title = 'article'; $article->views = 5; $article->published = true; $json = $serializer->serialize($article, 'json'); return new Response($json); } } ?>

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

{"title":"article","body":"","views":5,"published":true}

Пример

Давайте восстановим объект из JSON при помощи метода deserialize:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentSerializerSerializerInterface; class ArticleController extends AbstractController { public function index(SerializerInterface $serializer): Response { $json = '{"title":"article","views":5,"published":true}'; $article = $serializer->deserialize($json, Article::class, 'json'); return new Response($article->title); } } ?>

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

"article"

Пример

Давайте получим массив из объекта при помощи метода normalize:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentSerializerSerializerInterface; class ArticleController extends AbstractController { public function index(SerializerInterface $serializer): Response { $article = new Article(); $article->title = 'abcde'; $article->views = 3; $res = $serializer->normalize($article); return new Response(implode(', ', $res)); } } ?>

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

"abcde, , 3, "

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

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