在我的Symfony 4项目中,我有2个实体:Question和PossibleAnswer。
一个问题可以有很多可能的答案,答案可以用在许多不同的问题中。
我想发帖提问,我使用FOSRestBundle
。
这就是我格式化请求的主体:
{
"title": "my question",
"possibleAnswers": [
{
"id": 1,
"title": "my first answer"
}
]
}
至少这是FOSRestBundle在我直接在数据库中创建数据并解决问题时如何格式化答案。
但我一直得到同样的错误:
验证失败,possibleAnswers此值无效
我使用Symfony表单来验证我的POST,而我用于Question的possibleAnswers字段的fieldType是一个EntityType,其中选项multiple设置为true。也许这就是错误的来源。
所以我的问题是:
如何格式化我的请求正文以添加有效的possibleAnswers字段?如果我正在做的话,我应该使用哪种表格类型来运作?
很抱歉没有添加任何代码,上下文实际上要复杂得多,但我非常确定我的字段的JSON格式或表单类型是错误的。
[编辑]
这里是我为possibleanswers字段尝试的所有表单类型
//->add('possibleAnswers', EntityType::class, array('data' => [], 'required' => false, 'multiple' => true, 'class' => PossibleAnswer::class))
->add('possibleAnswers', CollectionType::class, array('required' => false, 'entry_type' => EntityType::class, 'entry_options' => array('class' => PossibleAnswer::class)))
//->add('possibleAnswers', CollectionType::class, array('required' => false, 'entry_type' => PossibleAnswerType::class))
//->add('possibleAnswers', CollectionType::class, array('required' => false, 'entry_type' => PossibleAnswerType::class, 'entry_options' => array('class' => PossibleAnswer::class)))
这里是我尝试选择可能性的所有JSON格式:
{
"title": "a postman created question",
"answerConditions": [
{
"id": 1,
"title": "already existing question",
}
]
}
{
"title": "a postman created question",
"answerConditions": [
{
"possibleanswer_id": 1
}
]
}
{
"title": "a postman created question",
"answerConditions": [
{
"id": 1
}
]
}
{
"title": "a postman created question",
"answerConditions": [
1
]
}
答案 0 :(得分:3)
如果要在发布问题时创建PossibleAnswer,则需要在表单中用CollectionType替换EntityType。
我经常在我的POST请求中使用它,当我想发布父对象时发布子对象(这里是PossibleAnswer)(问题):
问题表格
$builder
->add('possibleAnswers', CollectionType::class, array(
'entry_type' => PossibleAnswerType::class,
'allow_add' => true,
))
;
PossibleAnswer表格:
$builder
->add('title')
;
json看起来像:
{
"title": "my question",
"possibleAnswers": [
{
"title": "my first answer"
}
]
}
希望它可以提供帮助。
编辑: 如果您想在创建问题时将PossibleAnswer链接到问题,可以使用:
问题表格:
$builder
->add('possibleAnswer', EntityType::class, array(
'class' => YOUR_ENTITY::class,
'multiple' => true
));
你的json应该只包含你要链接到的实体的id。它应该是这样的:
{
"title": "a postman created question",
"answerConditions": [
1
]
}