我根据用户输入动态地使用事件监听器来更改数据。每次我使用PRE_SET_DATA
和PRE_SUBMIT
事件进行设置数据和字段选择。以下是PRE_SUBMIT
:
// Pre set share locations by share day
if (array_key_exists('shares', $data)) {
foreach ($data['shares'] as $key => $share) {
if ($share['pickUpDay'] !== null) {
$shareType = $form->get('shares')->get($key);
$locations = $this->em->getRepository('AppBundle:Member\Location')->getLocationsByDay($client, $data['shares'][$key]['pickUpDay']);
$this->addLocationField($shareType, $locations);
}
}
}
无论addLocationField
内部功能如何,它都能正常工作。
当我执行$form->get('shares')
时,我的收藏字段,然后我需要->get(child)
这个集合,并将字段数据和选择直接设置给这个孩子。当我动态添加集合时,Symfony显示错误:
儿童“n”不存在。
只有当我尝试获取动态添加的新集合的数据时,才会出现此问题。所以我无法进入收集字段并更改选择,因此我收到错误,我的新值不在选项列表中。
有趣的是$data['shares']
包含新收集元素的所有数据,但$form->get('shares')
没有:
var_dump(count($event->getData()['shares'])) - return 1;
var_dump(count($form->get('shares'))) - return 0;
这是否意味着我的PRE_SUBMIT
在Symfony收集功能发生之前有效?
有人知道如何修复它吗?
答案 0 :(得分:0)
我知道你的问题是"旧"你可能找到了解决方案,但当你说:
时,你的方向正确这是否意味着我的PRE_SUBMIT在Symfony集合功能发生之前有效?
您的新馆藏尚未提交,并且模型see this part of the doc
中不存在要制作您想要的内容,您应该使用the SUBMIT
event
注意:您无法在POST_SUBMIT