我正在尝试对我的symfony2实体字段使用select2。
我为实体字段创建了一个扩展,一个树枝模板和一个模型转换器。渲染效果很好,但是我在提交字段时遇到问题。
使用原始格式,将以如下方式发送值:
Content-Disposition: form-data; name="com_bundle_book[series]" 1
对于具有多个的实体
Content-Disposition: form-data; name="com_bundle_book[author][]" 1
Content-Disposition: form-data; name="com_bundle_book[author][]" 3
select2的行为是将现有字段替换为隐藏字段。发送的数据如下所示:
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'
)
)
您的Transformer不应返回对象,而应返回对象的ID,因为默认实体ModelTransformer仍然适用,并将这些ID转换为对象。
Doctrine实体Model Transformer适用于您的产品,这就是您永远无法达到的原因。像这样将其添加为ViewTransformer:
$builder->addViewTransformer(
new ObjectListToStringTransformer(
$this->em,
[
'class' => $options['class'],
'property' => $options['property'],
'delimiter' => ','
]
), true
);
我添加了一个TRUE作为addViewTransformer =>的第二个参数,与父字段类型定义的其他参数相比,它强制您的Transformer处于前置状态。
编辑:这样,您将必须适应您的Transformer transform()方法,因为它现在将接收ID数组而不是对象数组...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句