Php 有没有简单的方法将$options传递到symfony2中的表单,而不是在新建/编辑所有操作时

Php 有没有简单的方法将$options传递到symfony2中的表单,而不是在新建/编辑所有操作时,php,forms,symfony,Php,Forms,Symfony,我在我的表单类型中使用这个 ->add('Task', 'entity', array( 'class' => 'Task', 'query_builder' => function(EntityRepository $er) use ($options) { return $er->createQueryBuilder('t')

我在我的表单类型中使用这个

->add('Task', 'entity', array(
                 'class' => 'Task',
                 'query_builder' => function(EntityRepository $er) use ($options) {
                                     return $er->createQueryBuilder('t') 
                                     ->where('t.id = :id')
                                     ->setParameter('id',$options['id'])
现在,为了实现这一点,我需要在控制器中的表单类型中传递id

$form = $this->createForm(new TaskType(), $task,array('id' => $id));
现在它显示了我的表格,所有选项都很好。但后来我忘记了我还需要在控制器的
newAction
函数中添加相同的内容

我还需要在EditAction和Update action中添加相同的内容

这意味着我必须在四个地方重复这一点

另外,如果我有4行计算
$id
,那么我必须在四个位置重复所有这些步骤

最重要的是,当我编辑我的表单时,我的选择不会在我的选择框中预选

然后,我必须在显示在编辑表单中之前首先设置对象

但是如果我在没有任何疑问的情况下使用这个

->add('user')
然后,它的工作没有任何问题,编辑功能以及


我是否做错了什么

newAction中存在的
id
,我想它不依赖于用户,也不会从url中检索到。在这种情况下:

案例1:未从url检索id: 解决方案1:将entityManager直接注入表单,并在表单中执行逻辑,这样就不必在控制器中重复此操作

1-直接在表单中执行逻辑。在构造函数中添加检索您的
id
所需的服务

2-将表单声明为服务,并注入直接获取
id
所需的服务(通常是entityManager)

解决方案2: 在实体管理器中生成逻辑。创建一个函数,该函数接受
id
,并为您创建表单。这样,您总是在不同的控制器中使用相同的功能

案例2:从url检索id:
如果它是从url获得的,您仍然需要在选项中传递id,或者在构造函数中传递id。将id作为选项传递并不一定意味着您在重复代码。这只是必要的,所以必须要做。

谢谢patt,我明白了,你在说什么。另一个主要问题是,所选的选项不是以编辑形式预先选择的。为什么会这样。如果我不使用自定义查询,它们将被删除,但如果我使用它,则必须在editAction中手动预设它们