Symfony 7 Сопоставляет данные вложенного запросаPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Symfony 7 Сопоставляет данные вложенного запроса

Сообщение Anonymous »

Я пытаюсь сопоставить и проверить, используя полезную нагрузку запроса #[MapRequestPayload] с вложенными данными запроса. Когда я хочу сопоставить запрос всего с одним вопросом, все работает нормально, но когда я переключаю тип свойства $question в Quiz DTO, я получаю эту ошибку проверки.
CreateQuizDto .php
class CreateQuizDto
{
#[Assert\NotBlank()]
#[Assert\Length(min: 1, max: 255)]
public string $label;

#[Assert\Type('countable')]
#[Assert\All(new Assert\Type(CreateQuestionDto::class))]
#[Assert\Valid]
public array $questions;
}

CreateQuestionDto.php
class CreateQuestionDto
{
#[Assert\NotBlank()]
#[Assert\Length(min: 1, max: 255)]
public string $label;
}

Controller.php
#[Route('/api', format: 'json')]
class QuizController extends AbstractController
{
#[Route('/quiz', name: 'app_quiz', methods: ['POST'])]
public function index(#[MapRequestPayload] CreateQuizDto $dto): JsonResponse
{
return $this->json([
'dto' => $dto

]);
}
}

Пример тела запроса
{
"label": "Example Quiz",
"questions": [
{
"label": "Example Question 1"
},
{
"label": "Example Question 2"
}
]
}

Ошибка ответа
{
"type": "https://symfony.com/errors/validation",
"title": "Validation Failed",
"status": 422,
"detail": "questions[0]: This value should be of type App\\Dto\\CreateQuestionDto.\nquestions[1]: This value should be of type App\\Dto\\CreateQuestionDto.",
"violations": [
{
"propertyPath": "questions[0]",
"title": "This value should be of type App\\Dto\\CreateQuestionDto.",
"template": "This value should be of type {{ type }}.",
"parameters": {
"{{ value }}": "array",
"{{ type }}": "App\\Dto\\CreateQuestionDto"
},
"type": "urn:uuid:ba785a8c-82cb-4283-967c-3cf342181b40"
},
{
"propertyPath": "questions[1]",
"title": "This value should be of type App\\Dto\\CreateQuestionDto.",
"template": "This value should be of type {{ type }}.",
"parameters": {
"{{ value }}": "array",
"{{ type }}": "App\\Dto\\CreateQuestionDto"
},
"type": "urn:uuid:ba785a8c-82cb-4283-967c-3cf342181b40"
}
],
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... quest-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»