【问题标题】:How to accept a single, default field in a Symfony form?如何接受 Symfony 表单中的单个默认字段?
【发布时间】:2016-09-12 11:29:51
【问题描述】:

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

它使用 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 请求中指定该字段的名称。

【问题讨论】:

    标签: symfony symfony-forms


    【解决方案1】:

    不久前我遇到了类似的问题。对我有用的是使用 form factory 来创建一个 named form 具有空名称,就像这样(在典型控制器中的示例):

    /** @var $formFactory FormFactory */
    $formFactory = $this->get('form.factory');
    
    $form = $formFactory->createNamed('', $type, $data, $options);
    

    请注意,这样配置的表单将使用所有 POST(或 GET)数据。因此,如果您不能确保只存在所需的数据,您可能需要使用allow_extra_fields

    【讨论】:

    • 完美,谢谢。以前没有遇到过这种方法,但似乎做得很好。
    猜你喜欢
    • 2012-12-04
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多