Отправить вложенный Json в форму Symfony

У меня есть вложенный объект JSON, который я пытаюсь отправить в Symfony API, использующий FOSRestBundle.

{
    "firstName": "John",
    "lastName": "Doe",
    "email": "[email protected]",
    "responses": [
        {"1": "D"},
        {"2": "B"},
        {"3": "C"},
        {"4": "F"}
    ]
}

Но я получаю следующую ошибку:

{
"code": 400,
"message": "Validation Failed",
"errors": {
    "children": {
        "firstName": [],
        "lastName": [],
        "email": [],
        "responses": {
            "errors": [
                "This value is not valid."
            ]
        }
    }
}

}

Это мой FormType:

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('firstName',  TextType::class, [
            'constraints' => [
                new NotBlank(),
                new Length(['min' => 3]),
            ]
        ])
        ->add('lastName',  TextType::class, [
            'constraints' => [
                new NotBlank(),
                new Length(['min' => 3]),
            ]
        ])
        ->add('email',  TextType::class, [
            'constraints' => [
                new NotBlank(),
                new Length(['min' => 3]),
            ]
        ])
        ->add('responses');
    ;
}

И это мой метод контроллера:

/**
 * @Rest\Post(
 *     path="/api/report"
 * )
 * @param Request $request
 * @return Response
 */
public function post(Request $request)
{
    $form = $this->createForm(ReportType::class);
    $form->submit($request->request->all());

    if (false === $form->isValid()) {
        return $this->handleView(
            $this->view($form)
        );
    }

    return $this->handleView(
        $this->view(
            [
                'status' => 'ok',
            ],
            Response::HTTP_CREATED
        )
    );
}

Я смущен, так как нет ответов на проверку формы.

Я попытался реализовать решение, предлагаемое по этой ссылке: Как обрабатывать вложенный json с помощью форм FOSRestBundle и symfony

Но я получаю сообщение об ошибке: «Вы не можете добавлять детей в простую форму. Может быть, вам стоит установить для параметра «соединение» значение «истина»?

Может ли кто-нибудь дать совет, как это решить?


person Shaun    schedule 22.08.2020    source источник
comment
автоматическая проверка формы исходит из типа формы, который зависит от того, как определена ваша форма. Свойство ответа объекта Report (получатель / установщик) может пролить на него некоторый свет. Если вы не установите тип формы, тип формы будет угадан. $ Request- ›request-› all, вероятно, десериализует весь объект, поэтому у вас есть массив массивов для поля ответов, который, вероятно, не работает для автоматически предполагаемого типа формы ...   -  person Jakumi    schedule 22.08.2020


Ответы (1)


привет, я думаю, проблема в ответах. попробуйте использовать CollectionType. В этом примере используется ChoiceType для каждого объекта в вашей коллекции. См. Здесь: https://symfony.com/doc/current/reference/forms/types/collection.html#entry-options

->add('responses', CollectionType::class, [
 'entry_type'   => ChoiceType::class,
 'entry_options'  => [
     'choices'  => [
         '1' => 'D',
         '2' => 'A',
     ],
 ],
]);
person momoSakhoMano    schedule 22.08.2020