是否有任何简单的方法可以在symfony2中传递$ options而不是new / edit所有操作

时间:2012-08-23 14:50:47

标签: php forms symfony

我在我的FormType中使用它

->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动作

中添加相同的内容

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

如果我有4行计算$id,那么我必须在四个地方重复所有这些步骤。

当我编辑表单时,在我的选择框中没有预先选择我的选择。

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

但如果我在没有任何查询的情况下使用此

->add('user')

然后它也没有任何问题,也有编辑功能。

我做错了什么

1 个答案:

答案 0 :(得分:1)

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

案例1:未从网址中检索到ID:

解决方案1:将entityManager直接注入表单并在表单中执行逻辑,这样您就不必在控制器中重复此操作。

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

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

<强>溶液2: 在实体管理器中生成逻辑。创建一个采用id的函数并为您创建表单。这样,您总是在不同的控制器中使用相同的功能。

案例2:从网址

中检索ID

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