我正在尝试根据地区以及一个人的出生日期列出城市。这就是为什么在我的代码中我尝试这样做的原因:
$builder->get('region')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier) {
$data = $event->getForm()->getData();
$birthDate = $event->getForm()->getParent()->getData();
//formModifier where I am adding the $form->add('city'...
$formModifier($event->getForm()->getParent(), $data, $birthDate);
}
);
但是我从$ event-> getForm()-> getParent()-> getData()获得的数据不呈现我想要的数据,它获取的是预设数据的值,而不是所提交的数据。
当我转储$ event-> getForm()-> getParent()时,我可以看到要定位的数据位于子对象中,并且当我添加getData()时,该数据当前正在发送给我在模型数据中。
Symfony\Component\Form\Form {#2290 ▼
-config: Symfony\Component\Form\FormBuilder {#2330 ▶}
-parent: null
-children: Symfony\Component\Form\Util\OrderedHashMap {#2329 ▶}
-errors: []
-submitted: false
-clickedButton: null
-modelData: array:2 [▶]
-normData: array:2 [▶]
-viewData: array:2 [▶]
-extraData: []
-transformationFailure: null
-defaultDataSet: true
-lockSetData: false
-name: "information_salarie"
-inheritData: false
-propertyPath: null
}
我尝试使用getChildren(),但它说不知道该方法。如何访问children元素中的数据?
出生日期在日期时间输入中,恰好在区域1之前。我需要它,以便我可以获取该人出生时所在城市的名称(如果该名称与当前名称不同)。
非常感谢您的帮助!
您无法从子事件侦听器访问父数据:表单提交是在根表单上启动的,该根表单随后在触发submit
事件后立即在所有子表单上调用PRE_SUBMIT
方法。
如果要基于父数据修改子表单,则只能在父表单上使用PRE_SUBMIT
事件。
Ex:
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $e) {
$data = $e->getData();
$form = $e->getForm();
if ($data['birth_date'] === '1900-05-01') {
$form->add('city', CityType::class);
}
});
请注意,如果必须更改已经添加的字段的类型/选项,则必须先将其删除。