Symfony 2中的REST控制器:如何处理字段名称


REST controller in Symfony 2: how to deal with field names?

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

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

发布

A:香蕉

B:巧克力

Symfony地图:

a =>标题

b =>含量

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

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

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

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

其中formFactoryFormFactory服务的实例 ( @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',
    ));
}

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

希望这有帮助。

问候
马 特

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