2017-09-14 10 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?

新しいコレクションはまだ提出されておらず、それが中に存在していませんあなたは、あなたがthe SUBMIT event

NBを使用する必要がありますしたいものを作るためにモデルsee this part of the doc

:あなたはPOST_SUBMIT

上の任意のフィールドを追加することはできません
関連する問題