我想访问表单提交的实体,而不必使用嵌套的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循环访问实体?
答案 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) {
// ...
}