Symfony表单集合字段的事件监听器

时间:2017-09-14 16:17:57

标签: symfony symfony-3.2 symfony-3.1

我根据用户输入动态地使用事件监听器来更改数据。每次我使用PRE_SET_DATAPRE_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收集功能发生之前有效?

有人知道如何修复它吗?

1 个答案:

答案 0 :(得分:0)

我知道你的问题是"旧"你可能找到了解决方案,但当你说:

时,你的方向正确
  

这是否意味着我的PRE_SUBMIT在Symfony集合功能发生之前有效?

您的新馆藏尚未提交,并且模型see this part of the doc

中不存在

要制作您想要的内容,您应该使用the SUBMIT event

注意:您无法在POST_SUBMIT

上添加任何字段