如何接受Symfony表单中的单个默认字段?

时间:2016-09-12 11:29:51

标签: symfony symfony-forms

我有一个用Symfony3编写的REST API,在FOSRestBundle的帮助下。

它使用Symfony表单类进行数据输入(POST,PATCH,PUT操作),这几乎适用于所有端点。

但是我有一个子端点,它使用具有单个collectionType的表单来设置关系。 POST请求正文如下所示:

curl http://localhost/documents/100/related -d @- <<REQUEST_BODY
{
  "related": [
    {"id": 14},
    {"id": 23}
  ]
}
REQUEST_BODY

但是我想省略“相关”字段名称,因为此信息已经在URI中,并且在这里似乎是多余的。我想调整表单以接受这样的数据:

curl http://localhost/documents/100/related -d @- <<REQUEST_BODY
[
    {"id": 14},
    {"id": 23}
]
REQUEST_BODY

但是看不出如何让Symfony表单以这种方式运行?

为了澄清,我想接受单个表单字段,而不必在JSON请求中指定该字段的名称。

1 个答案:

答案 0 :(得分:1)

我有一段时间遇到过类似的问题。对我有用的是使用表单工厂创建一个带有空名称的命名表单,就像这样(例如在典型的控制器内部时):

/** @var $formFactory FormFactory */
$formFactory = $this->get('form.factory');

$form = $formFactory->createNamed('', $type, $data, $options);

请注意,配置为此类的表单将使用所有POST(或GET)数据。因此,如果您无法确保只显示所需的数据,则可能需要使用allow_extra_fields