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

vin*_*nux 1 php symfony

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

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

POST

一根香蕉

b:巧克力

Symfony地图:

a =>标题

b =>内容

Mat*_*att 5

你的问题有两部分.首先,前缀添加到字段名称和字段名称本身.

要删除前缀,请使用@ m2mdas描述的技巧(如果您使用)2.1.如果您没有开启2.1,最好的办法是使用创建表单createNamed并在创建表单时给出一个空名称.像这样的东西:

$this->formFactory->createNamed(new CustomType(), '', $data, $optionsArray);
Run Code Online (Sandbox Code Playgroud)

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

service()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',
    ));
}
Run Code Online (Sandbox Code Playgroud)

使用此功能,当Symfony a从POST数据接收字段时,它将title在呈现表单时将其映射到属性,反之亦然.您的对象需要一个setTitle方法和一个setContent方法.

希望这可以帮助.

问候,
马特