我使用事件监听器根据用户输入动态更改数据。每次我使用PRE_SET_DATA
和PRE_SUBMIT
事件来设置数据和字段选项。这里是行动从PRE_SUBMIT
简单的例子:Symfony表单收集字段的事件监听器
// 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的显示错误:
Child "n" does not exist.
当我试图获取被动态地添加新的集合的数据才会出现这种问题。因此,我无法访问收集字段并更改选项,因此我收到错误消息,说明我的新值不在选择列表中。
有趣的是$data['shares']
有新的集合元素的所有数据,但$form->get('shares')
haven`t:
var_dump(count($event->getData()['shares'])) - return 1;
var_dump(count($form->get('shares'))) - return 0;
是意味着我之前Symfony的集合功能PRE_SUBMIT
作品出现呢?
有人知道如何解决它?