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