Symfony 4:在没有嵌套 For 循环的情况下访问表单数据

Symfony 4: Accessing Form Data without Nested For Loop

我想访问表单提交的实体,而不必使用嵌套的 for 循环。目前,为了访问实体对象,我正在执行以下操作:

$courses = $form->getData();

foreach ($courses as $course) {
    foreach ($course as $c) {
        //do logic on entity $c
    }
}

表单生成器class:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('courses', EntityType::class, [
            'class' => Course::class,
            'choice_label' => 'name',
            'multiple' => true,
            'expanded' => true,
            'required' => false,
            'query_builder' => function (EntityRepository $er) use ($organization) {
                return $er->createQueryBuilder('course')
                    ->orderBy('course.semester', 'ASC');
            },
        ]);
    }

如何构造表单,以便可以使用单个 for 循环访问实体?

您对 getData() 的调用正在返回 all 表单 fields,但由于您似乎只有一个,因此它是以 "you expect" 的身份工作,但纯属偶然。如果您决定添加更多字段,例如 user 字段,在某些时候 $course 变量将包含 User 实体。如果将其重写为 $fieldData = $form->getData() 会更清楚,现在您可以将其视为以 fieldName.

为键的数组

您应该可以通过以下方式获得 Course 集合(特定字段):

$courses = $form->get('courses')->getData();  
// Or using PropertyAccess: $form['courses']->getData()

foreach ($courses as $course) {
// ...
}