REST API: 如何 post 与 fosrestbundle 的多对多关系
REST API: how to post a manytomany relationship with fosrestbundle
在我的 Symfony 4 项目中,我有 2 个实体:问题和可能的答案。
一个问题可以有很多可能的答案,一个答案可以用在很多不同的问题中。
我想 POST 一个问题,我使用 FOSRestBundle
。
我将如何格式化我的请求正文:
{
"title": "my question",
"possibleAnswers": [
{
"id": 1,
"title": "my first answer"
}
]
}
当我直接在数据库中创建数据并获取问题时,至少这是 FOSRestBundle 格式化答案的方式。
但我一直收到同样的错误:
Validation Failed, possibleAnswers This value is not valid
我使用 Symfony 表单来验证我的 POST,我用于问题的 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)))
以下是我尝试 select 可能答案的所有 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
]
}
如果您想在 post 提出问题时创建 PossibleAnswer,您需要将表单中的 EntityType 替换为 CollectionType。
我经常在我的 POST 请求中使用它,当我想 post sub-object (这里是可能的答案)时,当我 post 父(问题)时:
问题表
$builder
->add('possibleAnswers', CollectionType::class, array(
'entry_type' => PossibleAnswerType::class,
'allow_add' => true,
))
;
可能的答案形式:
$builder
->add('title')
;
而 json 看起来像:
{
"title": "my question",
"possibleAnswers": [
{
"title": "my first answer"
}
]
}
希望对您有所帮助。
编辑:
如果您想在创建问题时 link 一个问题的可能答案,您可以使用这个:
问题表:
$builder
->add('possibleAnswer', EntityType::class, array(
'class' => YOUR_ENTITY::class,
'multiple' => true
));
而你 json 应该只包含你想要 link 的实体的 ID。应该是这样的:
{
"title": "a postman created question",
"answerConditions": [
1
]
}
在我的 Symfony 4 项目中,我有 2 个实体:问题和可能的答案。
一个问题可以有很多可能的答案,一个答案可以用在很多不同的问题中。
我想 POST 一个问题,我使用 FOSRestBundle
。
我将如何格式化我的请求正文:
{
"title": "my question",
"possibleAnswers": [
{
"id": 1,
"title": "my first answer"
}
]
}
当我直接在数据库中创建数据并获取问题时,至少这是 FOSRestBundle 格式化答案的方式。
但我一直收到同样的错误:
Validation Failed, possibleAnswers This value is not valid
我使用 Symfony 表单来验证我的 POST,我用于问题的 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)))
以下是我尝试 select 可能答案的所有 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
]
}
如果您想在 post 提出问题时创建 PossibleAnswer,您需要将表单中的 EntityType 替换为 CollectionType。
我经常在我的 POST 请求中使用它,当我想 post sub-object (这里是可能的答案)时,当我 post 父(问题)时:
问题表
$builder
->add('possibleAnswers', CollectionType::class, array(
'entry_type' => PossibleAnswerType::class,
'allow_add' => true,
))
;
可能的答案形式:
$builder
->add('title')
;
而 json 看起来像:
{
"title": "my question",
"possibleAnswers": [
{
"title": "my first answer"
}
]
}
希望对您有所帮助。
编辑: 如果您想在创建问题时 link 一个问题的可能答案,您可以使用这个:
问题表:
$builder
->add('possibleAnswer', EntityType::class, array(
'class' => YOUR_ENTITY::class,
'multiple' => true
));
而你 json 应该只包含你想要 link 的实体的 ID。应该是这样的:
{
"title": "a postman created question",
"answerConditions": [
1
]
}