我刚刚在Symfony2上使用SensioGeneratorBundle生成了一些实体和一个CRUD,并且我将生成的CRUD转换为REST API.我遇到了字段名称的问题...我希望有自定义字段名称,而Symfony的bindRequest期望"acme_demobundle_tabletype_field"以便正常工作并验证,我想只有"字段".
如何使用自定义字段名称POST并使控制器理解并绑定正确的值?例如:
POST
一根香蕉
b:巧克力
Symfony地图:
a =>标题
b =>内容
你的问题有两部分.首先,前缀添加到字段名称和字段名称本身.
要删除前缀,请使用@ 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
方法.
希望这可以帮助.
问候,
马特