我正在尝试将select2用于我的symfony2 entity fields。
我为它创建了实体字段的扩展,树枝模板和模型变换器。渲染工作正常,但我提交字段时遇到问题。
使用原始格式,值的发送方式如下:
Content-Disposition: form-data; name="com_bundle_book[series]" 1
对于具有多个s的实体
Content-Disposition: form-data; name="com_bundle_book[author][]" 1
Content-Disposition: form-data; name="com_bundle_book[author][]" 3
select2&#39>的行为是用隐藏字段替换现有字段。发送的数据如下所示:
Content-Disposition: form-data; name="com_bundle_book[series]" TraLiRo
Content-Disposition: form-data; name="com_bundle_book[author][]" Ferdinand,Hans
我希望用modelTransformer对它进行排序,但是我从而在从不调用modelTransformer的情况下得到两个字段的错误(无效值)。
我尝试了实体的扩展和扩展实体本身。我的服务:
com_bundle.tag_type_extension:
class: ...\Form\Extension\TagTypeExtension
tags:
- { name: form.type_extension, alias: entity }
arguments: [@doctrine.orm.entity_manager]
com_bundle.form.type.tagType_entity:
class: ...\Form\Extension\TagTypeExtension2
tags:
- { name: form.type, alias: tagType_entity }
arguments: [@doctrine.orm.entity_manager]
课程:
我该如何解决这个问题?
表单构建如下:
$builder
->add('author',
'entity',
array(
'select2' => true,
'multiple' => true,
'class' => 'Bundle:Author',
'property' => 'name'
)
)
答案 0 :(得分:1)
您的Transformer不应返回对象,而应返回对象ID,因为默认实体ModelTransformer仍然适用,并会将这些ID转换为对象。
Doctrine实体模型变换器适用于您之前的实体,这就是您永远无法达到它的原因。将它添加为ViewTransformer,如下所示:
$builder->addViewTransformer(
new ObjectListToStringTransformer(
$this->em,
[
'class' => $options['class'],
'property' => $options['property'],
'delimiter' => ','
]
), true
);
我添加了一个TRUE作为addViewTransformer =>的第二个参数。与父字段类型定义的其他变换器相比,它会强制您的变换器前置。
编辑:这样您就必须调整Transformer transform()方法,因为它现在会收到ID数组而不是对象数组...