У меня есть класс OrderDto с вложенным классом PointDto (массив точек):
class OrderDto
{
/**
* @var PointDto[]
* @Assert\All({
* @Assert\Type("App\Dto\PointDto")
* })
* @Assert\Valid()
*/
private array $points;
// getters, setters
}
Класс PointDto также использует ограничения валидатора:
class PointDto
{
/**
* @Assert\NotBlank()
*/
private string $address;
// getters, setters
}
Мой контроллер:
/**
* @Rest\Post("/order/calc")
* @ParamConverter("orderDto", converter="fos_rest.request_body")
*/
public function calcOrder(OrderDto $orderDto, ConstraintViolationListInterface $validationErrors)
{
if (count($validationErrors) > 0)
return $this->json($validationErrors, Response::HTTP_BAD_REQUEST);
return ApiResponseUtil::okData(['sum' => 0]);
}
Но когда отправляется запрос с вложенным объектом dto, например:
{
"points": [
{
"address": "",
"person": {
"name": "",
"phone": ""
}
}
]
}
Валидатор не может определить тип, ошибка:
{
"error": "points[0]: This value should be of type App\\Dto\\PointDto.",
"violations": [
{
"property": "points[0]",
"message": "This value should be of type App\\Dto\\PointDto."
}
]
}
Есть ли способ десериализации вложенного объекта?