私は、ユーザの入力に基づいて動的にデータを変更するためにイベントリスナーを使用します。私は毎回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
作品が起こることを意味していますか?
誰かがそれを修正する方法を知っていますか?