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

时间:2019-07-11 15:13:36

标签: php symfony4 symfony-forms

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

$courses = $form->getData();

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

表单构建器类:

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循环访问实体?

1 个答案:

答案 0 :(得分:1)

您对getData()的调用返回的是 all 形式的 fields ,但是由于您似乎只有一个,因此它按“您的期望”工作,但是意外地。如果您决定添加更多字段,例如user字段,则在某个时刻$course变量将保存一个User实体。如果将其重写为$fieldData = $form->getData(),将会更加清楚,现在您可以将其视为由fieldName键控的数组。

您应该可以使用以下方法仅获取Course集合(特定字段):

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

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