Symfony 2实体表单字段名称

时间:2014-03-27 10:16:16

标签: php symfony

我有表单构建器:

        private function createTaskForm($id) {

        $form = $this->createFormBuilder()
                ->setAction($this->generateUrl('admin_user__tasks_update_', array('id' => $id)))
                ->setMethod('put');
        $form
                ->add('tasks', 'entity', array(
                    'class' => 'WorksheetsWorksheetsBundle:Task',
                    'property' => 'name',
                    'expanded' => 'true',
                    'multiple' => 'true'
                        )
        );
        return $form->getForm();
    }

但我需要让控制器中的每一个孩子,但我不知道我怎么能这样做(不知道孩子的名字),因为symfony生成这个复选框

 <input type="checkbox" id="form_tasks_27" name="form[tasks][]" value="27" />

每个字段都有相同的名称,如何在控制器中更改此名称?

1 个答案:

答案 0 :(得分:0)

这不是Symfony的工作原理。使用Symfony框架构建表单,在表单(视图)和它的底层数据(模型)之间建立映射。您使用数据。 Symfony将数据映射到表单并自动返回。要将默认值设置为表单,您需要修改基础表单数据,而不是表单的视图元素本身。

默认情况下,表单的基础数据是关联数组。因此,您可以在方法的最后一行之前执行类似的操作,以使用ID 2,3和5检查任务:

...
$em = $this->get('doctrine)->getManager();
$taskRepo = $em->getRepository('WorksheetsWorksheetsBundle:Task');
$data['tasks'][] = $taskRepo->findOneById(2);
$data['tasks'][] = $taskRepo->findOneById(3);
$data['tasks'][] = $taskRepo->findOneById(5);
$form->setData($data);
...

注意我不建议实际硬编码该方法中的默认任务ID。

另外请记住,为了充分利用Symfony,您通常会将表单设置为映射到特定类的实体。在这种情况下,这将是具有许多任务的实体,并且它将具有数据成员&#39;任务&#39;使用相应的添加和删除方法。通过使用实体作为表单的基础数据,将自动在表单上检查属于该实体的任何任务,并且实体的任务将由$ form-&gt; handleRequest()自动更新。同样,如果您需要设置默认值,则可以通过在将实体作为数据传递到表单之前设置实体来执行此操作。如果值不是默认值,而是已经属于实体的实际值,那么您不需要做任何事情。我强烈建议使用这种方法。