Команда make:serializer:normalizer
Команда make:serializer:normalizer генерирует
класс нормализатора для компонента Serializer.
Нормализатор преобразует объекты в массивы и
обратно. Первым параметром передаётся имя класса
нормализатора. Команда создаёт файл в директории
src/Serializer/Normalizer и регистрирует его
как сервис.
Синтаксис
php bin/console make:serializer:normalizer ClassName
Пример
Давайте создадим нормализатор для сущности Article:
php bin/console make:serializer:normalizer ArticleNormalizer
После выполнения команды будет создан файл:
<?php
namespace AppSerializerNormalizer;
use SymfonyComponentSerializerNormalizerNormalizerInterface;
use SymfonyComponentSerializerNormalizerDenormalizerInterface;
class ArticleNormalizer implements NormalizerInterface, DenormalizerInterface
{
public function normalize(mixed $object, ?string $format = null, array $context = []): array|string|int|float|bool|ArrayObject|null
{
// TODO: implement normalization
return [];
}
public function supportsNormalization(mixed $data, ?string $format = null, array $context = []): bool
{
// TODO: implement supportsNormalization
return false;
}
public function denormalize(mixed $data, string $type, ?string $format = null, array $context = []): mixed
{
// TODO: implement denormalization
return null;
}
public function supportsDenormalization(mixed $data, string $type, ?string $format = null, array $context = []): bool
{
// TODO: implement supportsDenormalization
return false;
}
}
?>
Пример
Давайте реализуем нормализатор для сущности
Article с полями title и text:
<?php
namespace AppSerializerNormalizer;
use AppEntityArticle;
use SymfonyComponentSerializerNormalizerNormalizerInterface;
use SymfonyComponentSerializerNormalizerDenormalizerInterface;
class ArticleNormalizer implements NormalizerInterface, DenormalizerInterface
{
public function normalize(mixed $object, ?string $format = null, array $context = []): array|string|int|float|bool|ArrayObject|null
{
return [
'id' => $object->getId(),
'title' => $object->getTitle(),
'text' => $object->getText(),
];
}
public function supportsNormalization(mixed $data, ?string $format = null, array $context = []): bool
{
return $data instanceof Article;
}
public function denormalize(mixed $data, string $type, ?string $format = null, array $context = []): mixed
{
$article = new Article();
$article->setTitle($data['title']);
$article->setText($data['text']);
return $article;
}
public function supportsDenormalization(mixed $data, string $type, ?string $format = null, array $context = []): bool
{
return $type === Article::class;
}
}
?>
Теперь используем нормализатор в контроллере:
<?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->setTitle('hello');
$article->setText('abcde');
$res = $serializer->normalize($article);
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
{"id":null,"title":"hello","text":"abcde"}
Смотрите также
-
команда
debug:serializer,
которая отлаживает работу Serializer -
команда
make:entity,
которая создаёт сущность Doctrine -
команда
make:controller,
которая создаёт класс контроллера -
команда
make:test,
которая создаёт класс теста