Symfony通过具有关系的端点发布表单数据

时间:2018-03-16 15:19:47

标签: php forms api symfony post

我有一个问题,即将数据发布到Symfony到一个端点,该端点需要格式化为Symfony表单的数据。

端点使用Symfony表单验证发布的数据。通常,当我有一个带有树枝的渲染形式。关系字段将具有如下结构:

<select id="form_product" name="form[product]">
   <option value="0" selected="selected">...</option>
   <option value="1">A product</option>
   <option value="2">Some other product</option>
   <option value="3">Product</option>
   <option value="4">Nice product</option>
   <option value="5">Stupid product</option>
   <option value="6">Interesting product</option>
</select>

现在我没有这个,我只有一个端点。

每当我想发布一条记录时,说&#34;好产品&#34;我可以发布一个包含[product] = 4形式的正文,并且正确处理关系。但我只知道我应该发布4,因为我检查了渲染的形式。

当我需要更新记录与产品的关系时也是如此,因为我不知道要发送什么,因为这些值与任何东西都没有关系,选项值只是一个增量值而不管记录身份或任何事情。

这通常是怎么做的?如何手动创建包含我选择的关系的帖子主体?

2 个答案:

答案 0 :(得分:1)

如果您可以控制Symfony表单类,则可以使用choices选项预测value属性:

$builder->add('product', ChoiceType::class, array(
    'choices' => array(
        'Nice product' => 'nice-product', 
        'NOT nice product' => 'not-nice-product'
    ),
));

事先了解此映射,然后您使用form[product]='nice-product'提交POST。

注意:choices选项也适用于EntityType form type

答案 1 :(得分:0)

如果您使用的是REST端点,我假设您正在使用JavaScript,手机应用程序或类似工具构建Web应用程序。

在这种情况下,正常程序是存在一个端点来列出这个相关实体并知道它。

例如,在javascript Web应用程序中,我呈现了一个选择了这个关系实体的表单,在显示此字段之前,我调用了一个返回此实体的ID和标签的端点:

{
   {“id”: 1, “label”: “value 1”},
   {“id”: 2, “label”: “value 2”}
}

之后我们用这个值渲染字段,然后用户选择一个,这就是if if最终发送到你的端点。

我希望这可以帮到你