我在我的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')
然后它也没有任何问题,也有编辑功能。
我做错了什么
答案 0 :(得分:1)
newAction中存在id
,我认为它不依赖于用户,也不会从url中检索到。在那种情况下:
解决方案1:将entityManager直接注入表单并在表单中执行逻辑,这样您就不必在控制器中重复此操作。
1-直接在表单中执行逻辑。添加在构造函数中检索id
所需的服务。
2-将表单声明为服务,并注入所需的服务(通常是entityManager)以直接获取id
。
<强>溶液2:强>
在实体管理器中生成逻辑。创建一个采用id
的函数并为您创建表单。这样,您总是在不同的控制器中使用相同的功能。
如果是从url获取的,您仍然需要在选项中传递id或在构造函数中传递id。将id作为选项传递并不一定意味着您要重复代码。它只是必需品,所以必须这样做。