1

我刚刚在 Symfony2 上使用 SensioGeneratorBundle 生成了一些实体和一个 CRUD,我正在将生成的 CRUD 转换为 REST API。我在使用字段名称时遇到问题...我想要自定义字段名称,而 Symfony 的 bindRequest 需要“acme_demobundle_tabletype_field”才能正常工作和验证,我只想拥有“字段”。

如何使用自定义字段名称进行 POST 并让控制器理解并绑定正确的值?例如:

邮政

一根香蕉

b:巧克力

Symfony 地图:

a => 标题

b => 内容

4

2 回答 2

5

你的问题有两个部分。首先是字段名称前面的前缀和字段名称本身。

要摆脱前缀,请使用@m2mdas 描述的技巧,如果您在2.1. 如果您不在2.1,最好的办法是使用创建表单createNamed并在创建表单时提供一个空名称。像这样的东西:

$this->formFactory->createNamed(new CustomType(), '', $data, $optionsArray);

从未测试过此表单,2.0.x但可以确认2.1使用空名称删除字段的前缀。

formFactory服务的实例在哪里FormFactory( @form.factory)。

对于字段,您可以使用自定义名称并告诉 Symfony 它应该在哪里映射属性。为此,您使用该property_path选项。这将指示 symfony 将属性映射到这个路径而不是默认路径。在这里定义它时应该如何在表单类型中使用它:

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('a', 'text', array(
        'property_path' => 'title',
    ));

    $builder->add('b', 'text', array(
        'property_path' => 'content',
    ));
}

使用这个,当 Symfonya从 POST 数据中接收到字段时,它会将其映射到属性title,反之亦然。您的对象将需要一个setTitle方法和一个setContent方法。

希望这可以帮助。

问候,
马特

于 2012-04-26T03:36:57.143 回答
1

我查看了github。根据PR,您可以设置空的父名称。getName因此,在您的表单类型类中,只需在方法中返回空字符串。

于 2012-04-25T22:00:54.187 回答