symfony detime normalizer Как десериализовывать дэйттайм и связанные сущности (объект по id)
Primary tabs
services:
# default configuration for services in *this* file
_defaults:
autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
bind:
Symfony\Component\Serializer\SerializerInterface $apiSerializer: '@api.serializer'
#..........
Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer: ~
Symfony\Component\Serializer\Encoder\JsonEncoder: ~
app.entity_serializer:
class: App\Normalizer\EntityNormalizer
public: false
autowire: true
autoconfigure: true
tags:
- { name: serializer.normalizer }
api.date_normalizer:
class: Symfony\Component\Serializer\Normalizer\DateTimeNormalizer
arguments:
- { 'datetime_format': 'd/m/Y' }
api.serializer:
class: Symfony\Component\Serializer\Serializer
arguments:
- ['@api.date_normalizer', '@app.entity_serializer', '@Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer']
- ['@Symfony\Component\Serializer\Encoder\JsonEncoder']
где:
- источник идеи: https://stackoverflow.com/a/53898005
- см. дополнительную реализацию нестандартного App\Normalizer\EntityNormalizer
-- в примере выше мы сконфигурировали собственный сериализатор под именем $apiSerializer, чтобы получить его в контроллере, надо просто сделать инъекцию зависимостей с переменной этого же имени, например:
public function __construct(MyTargetClientService $MtApiClient,
CampaignRepository $campaignRepository, ValidatorInterface $validator,
PaginatorInterface $paginator, SerializerInterface $apiSerializer) {
// ..........
$this->serializer = $apiSerializer;
}
- Log in to post comments
- 3169 reads
vedro-compota
Wed, 07/03/2019 - 19:35
Permalink
конфигурация в коде
также конвертирования (получения из id) объектов можно добиться с помощью конфигурирования сериаллайзера в коде, например в конструкторе вашего сервиса или контроллера:
$serializer = new Serializer([ new DateTimeNormalizer(), new ObjectNormalizer( new ClassMetadataFactory( new AnnotationLoader( new AnnotationReader() ) ), new CamelCaseToSnakeCaseNameConverter(), null, new ReflectionExtractor() ), new ArrayDenormalizer(), ]);_____________
матфак вгу и остальная классика =)