我刚刚在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
确认具有空名称会删除字段的前缀。
其中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
方法。
希望这有帮助。
问候
马 特
我研究了github。根据此 PR,您可以设置空的父名称。因此,在您的表单类型类中,只需在方法中返回空字符串getName
。