使用没有视图的Symfony2表单

时间:2014-05-19 22:22:52

标签: symfony symfony-forms

我正在构建Rest Api,并且还使用Symfony2表单来处理我的put和post请求。

我经历过我的一些邮寄或投放操作开始变得很慢。我调试并发现我的一个表单通过将“ID”转换为实体的视图表示而花费很长时间。问题在于:

$builder->add('user', 'entity', array('class' => 'StregoUserBundle:User'))

提交表单并提供值“26”时,viewtransformer将获取所有内容!用户在呈现表单时显示它们。 (选择列表)

在提供选择数组时我可以避免这种情况:

$builder->add('user', 'entity', array('class' => 'StregoUserBundle:User',
                                        'choices' => array()
                                        ));

这对性能产生了重大影响,我开始在所有“实体”表单字段中执行此操作。问题是,是否存在完全禁用视图转换的通用解决方案?

更新 我没有解决问题,因为通过提供一个空的选择数组,我提交的值被拒绝。所以我仍然坚持禁用视图变换器的任务。

2 个答案:

答案 0 :(得分:0)

从理论上讲,你可以只渲染一个整数字段而不是实体字段并使用数据转换器。你可以通过这种方式轻松过关。

答案 1 :(得分:0)

IMO,您最好的解决方案是提供一个表单扩展,它将覆盖实体表单类型的行为。然后在此扩展中,用您自己的实现替换默认数据转换器。

有关表单扩展名的文档:http://symfony.com/doc/current/cookbook/form/create_form_type_extension.html

如您所见,您可以覆盖buildForm方法,然后删除所有数据转换器,并根据需要添加自己的数据转换器。