我刚刚在Symfony2上使用SensioGeneratorBundle生成了一些实体和一个CRUD,并且我将生成的CRUD转换为REST API。我遇到了字段名称的问题...我希望有自定义字段名称,而Symfony的bindRequest期望“acme_demobundle_tabletype_field”以便正常工作并验证,我想只有“字段”。
如何使用自定义字段名称POST并使控制器理解并绑定正确的值?例如:
POST
a:香蕉
b:巧克力
Symfony地图:
a =>标题
b =>含量
答案 0 :(得分: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',
));
}
使用此功能,当Symfony从POST数据收到字段a
时,它会在呈现表单时将其映射到属性title
,反之亦然。您的对象需要setTitle
方法和setContent
方法。
希望这有帮助。
的问候,
马特
答案 1 :(得分:1)
我看着github。根据{{3}} PR,您可以设置空父母姓名。因此,在表单类型类中,只需在getName
方法中返回空字符串。