如何在Symfony2中将另一个实体信息传递给表单?

时间:2014-06-07 05:19:21

标签: symfony

在另一个实体的表单中包含其他信息的最佳做法是什么?

我有学生实体小组实体 StudentsGroup 出勤实体。

  • 学生idcodename
  • 群组idname
  • StudentsGroup idgroup_idstudent_id
  • 出席情况idstudents_group_iddatestatus

群组可以有多个学生,其保存在 StudentsGroup 中。为什么我要 StudentsGroup ?因为实际上1 可以有一些 子组 ,例如 SubjectsGroup 等。< strong>出勤通过 StudentsGroup ID 保存学生信息,同一个学生可以有不同的students_group_id

Relationship Table

现在,问题是:如何以收集形式出示学生信息? 所有实体关系都声明为对象,因此实际上我们可以从任何实体自由访问em。但我不知道如何以形式做到这一点。我的表格在这里:

<?php
/* Collection Form */
$tanggal = new \DateTime($request->request->get('sifo_adminbundle_studentsgrouping')['tanggal']);
$attendances = new StudentsGrouping();
foreach ($entities as $temp) {
    $entity = new Attendance();
    $entity = $em->getRepository('SifoAdminBundle:Attendance')->findOneBy(array('studentsGrouping' => $temp, 'date' => $tanggal));
    if ($entity){
        $attendances->getAttendances()->add($entity);
    }
}

$form = $this->createCollectionForm($attendances, $id, $tanggal);

return $this->render('SifoAdminBundle:DftAbsensi:manage.html.twig', array(
    'form' => $form->createView(),
));

这就是我在树枝上渲染的方式:

{{ form_start(form_collection) }}
{{ form_row(form_collection.tanggal) }}
    {% for attendance in form_collection.attendances %}
        {{ form_row(attendance.status) }}
    {% endfor %}
{{ form_end(form_collection) }}

## Concept ##

我正在考虑创建实体并将其传递到以下形式:

foreach ($entities as $temp) {
    $entity = new Student();
    $entity = $em->getRepository('SifoAdminBundle:Student')->find($temp->getId());
    if ($entity){
        $entities[i] = $entity;
    }
    $i++
}

然后在树枝上显示它是这样的:

{{ form_start(form_collection) }}
{{ form_row(form_collection.tanggal) }}
    {% for key, attendance in form_collection.attendances %}
        {{ entities[key].code }}
        {{ entities[key].name }}
        {{ form_row(attendance.status) }}
    {% endfor %}
{{ form_end(form_collection) }}

但我觉得这不舒服。我真的需要创建新的实体,只是为了显示学生实体的名称和代码吗?有这样做的最佳做法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用实体字段。

$builder->add('users', 'entity', array(
    'class' => 'AcmeHelloBundle:User',
    'multiple' => true, /* you can choose more than one */
    'mapped' => false, /* if you are using the form with an entity */
    'query_builder' => function(EntityRepository $er) {
        /* use query builder to get correct results */
        return $er->createQueryBuilder('u')->orderBy('u.username', 'ASC');
    },
));

上面有两个重要的关键。

'multiple' => true -----您可以选择多个

'mapped' => false -----如果您使用带有实体的表单,您的表单将自动查找这些实体之间的连接,如果找不到,则抛出异常。要避免此问题,您应将此选项设置为false

http://symfony.com/doc/current/reference/forms/types/entity.html