如何解决将嵌套的Json发送到Symfony表单
我有一个嵌套的JSON对象,试图将其发送到使用FOSRestBundle的Symfony API。
{
"firstName": "John","lastName": "Doe","email": "john.doe@gmail.com","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',]
])
->add('email',]
])
->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
)
);
}
我很困惑,因为没有表单验证$ response。
我尝试实现此链接上提供的解决方案: How to process nested json with FOSRestBundle and symfony forms
但是我收到错误消息“您无法将孩子添加到简单表单中。也许您应该将“ compound”选项设置为true?
任何人都可以提供有关如何解决此问题的建议吗?
解决方法
你好,我认为问题在于回应。尝试使用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',],]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。