Сериализатор Symfony не работает с —no-dev

Я использую Symfony сериализатор. Но если я установлю пакеты композера с --no-dev флаг, он десериализует данные, которые вместо этого должны быть массивом объектов в массиве массивов.

Это сериализация:

$result = $this->get('serializer')->deserialize(
$request->getContent(),
InputDto::class,
'json'
);

А для десериализации я использую аннотации в DTO.

Вот так выглядит «поле» в DTO для массива объектов:

/**
* @var OrderItemDto[]|Collection
*/
private $items = [];

1

Решение

На основании кода:

https://github.com/symfony/serializer/blob/master/Encoder/JsonDecode.php#L84

Если вы передадите опцию json_decode_associative как ложь

$result = $this->get('serializer')->deserialize(
$request->getContent(),
InputDto::class,
'json',
['json_decode_associative' => false]
);

Не следует пытаться преобразовать его в массив.

http://php.net/manual/en/function.json-decode.php

2

Другие решения

Чтобы заставить работать подуровень объекта, вам нужно добавить в app/config/config.yml
в framework раздел следующие строки:

property_info:
enabled: true
1

По вопросам рекламы [email protected]