繁体   English   中英

Symfony 2实体表单字段名称

[英]Symfony 2 Entity form fields name

我有表单生成器:

        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" />

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

这不是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,通常需要设置一个表格以映射到特定类别的实体。 在这种情况下,这将是具有许多任务的实体,并且它将具有带有相应的add和remove方法的数据成员“任务”。 通过使用实体作为表单的基础数据,将自动在表单上检查属于该实体的任何任务,并通过$ form-> handleRequest()自动更新该实体的任务。 同样,如果需要设置默认值,则可以在将实体作为数据传递到表单之前,通过在实体上设置then来进行设置。 如果这些值不是默认值,但实际值已经属于该实体,则您无需执行任何操作。 我强烈建议使用这种方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM