Symfony конвертер "fos_rest.request_body": не десериализовать вложенные классы DTO - PullRequest
2 голосов
/ 26 февраля 2020

У меня есть класс 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."
    }
  ]
}

Есть ли способ десериализации вложенного объекта?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...