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

时间:2012-04-25 21:14:12

标签: php symfony

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

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

POST

a:香蕉

b:巧克力

Symfony地图:

a =>标题

b =>含量

2 个答案:

答案 0 :(得分:5)

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

要删除前缀,请使用@ 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方法。

希望这有帮助。

的问候,
马特

答案 1 :(得分:1)

我看着github。根据{{​​3}} PR,您可以设置空父母姓名。因此,在表单类型类中,只需在getName方法中返回空字符串。