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

Метод denormalize класса Serializer

Метод denormalize класса Serializer выполняет обратное преобразование: он принимает массив данных и имя класса, а возвращает объект этого класса, заполненный переданными данными. Первым параметром передаётся массив данных, вторым - имя класса, в который нужно преобразовать массив. Третьим необязательным параметром можно передать имя формата, а четвёртым - массив контекста.

Синтаксис

denormalize(data, type, format = null, context = [])

Пример

Давайте создадим простую сущность Article и преобразуем в неё массив данных:

<?php namespace AppEntity; class Article { private string $title; private string $text; private int $views; public function getTitle(): string { return $this->title; } public function setTitle(string $title): void { $this->title = $title; } public function getText(): string { return $this->text; } public function setText(string $text): void { $this->text = $text; } public function getViews(): int { return $this->views; } public function setViews(int $views): void { $this->views = $views; } } ?>

Теперь выполним денормализацию массива в объект Article:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentSerializerSerializer; use SymfonyComponentSerializerEncoderJsonEncoder; use SymfonyComponentSerializerNormalizerObjectNormalizer; class ArticleController extends AbstractController { public function index(): Response { $serializer = new Serializer( [new ObjectNormalizer()], [new JsonEncoder()] ); $data = [ 'title' => 'article', 'text' => 'abcde', 'views' => 5, ]; $article = $serializer->denormalize($data, Article::class); return new Response($article->getTitle()); } } ?>

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

"article"

Пример

Давайте денормализуем JSON-строку в объект Article, указав формат 'json':

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentSerializerSerializer; use SymfonyComponentSerializerEncoderJsonEncoder; use SymfonyComponentSerializerNormalizerObjectNormalizer; class ArticleController extends AbstractController { public function index(): Response { $serializer = new Serializer( [new ObjectNormalizer()], [new JsonEncoder()] ); $json = '{"title":"article","text":"abcde","views":5}'; $article = $serializer->denormalize($json, Article::class, 'json'); return new Response((string) $article->getViews()); } } ?>

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

"5"

Пример

Давайте денормализуем массив массивов в массив объектов Article, передав тип Article::class . '[]':

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentSerializerSerializer; use SymfonyComponentSerializerEncoderJsonEncoder; use SymfonyComponentSerializerNormalizerObjectNormalizer; class ArticleController extends AbstractController { public function index(): Response { $serializer = new Serializer( [new ObjectNormalizer()], [new JsonEncoder()] ); $data = [ ['title' => 'article', 'text' => 'abcde', 'views' => 1], ['title' => 'user', 'text' => 'hello', 'views' => 2], ]; $articles = $serializer->denormalize($data, Article::class . '[]'); $titles = array_map( fn (Article $article) => $article->getTitle(), $articles ); return new Response(implode(', ', $titles)); } } ?>

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

"article, user"

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

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