Мучаюсь уже третий день и не могу понять, как применить слушателей событий форм к коллекциям. Данные меняются динамически в зависимости от ввода пользователя. Форма содержит коллекцию с данными в которых пользователь и заполняет поля. Для того, чтобы изменять данные динамически, я использую события POST_SET и PRE_SUBMIT при этом POST_SET работает на ура, а вот с событиями после отправки формы беда.
В событии PRE_SUBMIT я в цикле прохожусь по всем коллекциям формы и получаю поля коллекции, которые я могу изменять. Только вот проблема в том, что во время иcпользования коллекций их инициализация происходит во время события SUBMIT, то есть в PRE_SUBMIT их просто еще нет в форме! А если использовать для изменения события SUBMIT или POST_SUBMIT, тогда коллекция уже есть в форме, но изменить ее уже нельзя, так как на это этапе она уже инициализирована.
Поэтому получается замкнутый круг, в PRE_SUBMIT данные коллекции можно изменить но их там еще нет, а в SUBMIT они есть, но изменить их уже нельзя. Пример кода для наглядности:
public function preSubmit(FormEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
// We don`t need to change locations in add event only for update existed
$client = $form->getConfig()->getOptions()['client'];
$shareForms = $form->get('shares');
foreach ($data['shares'] as $key => $share) {
if ($share['pickUpDay'] !== null && $share['pickUpDay'] !== '') {
$locations = $this->em->getRepository('AppBundle:Member\Location')->getLocationsByDay($client, $share['pickUpDay']);
$this->addLocationField($shareForms->get($key), $locations);
}
}
}
Получить экземпляр коллекции в preSubmit методом $shareForms->get($key) я не могу, а в postSubmit могу, но там поля уже менять нельзя. Может у кто-то сталкивался?