2017-09-14 45 views
1

我使用事件监听器根据用户输入动态更改数据。每次我使用PRE_SET_DATAPRE_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作品出现呢?

有人知道如何解决它?

回答

0

我知道你的问题是“老”,你可能会发现一个解决方案,但是当你说你是在正确的方向:

Is that mean that my PRE_SUBMIT works before Symfony collection functionality happen?

您的新集合尚未提交,这是不存在的模型see this part of the doc

为了让你想,你应该使用the SUBMIT event

注意什么:你不能在POST_SUBMIT

添加任何领域