@Kinroom

Symfony Form Event Listener как применить для коллекций?

Мучаюсь уже третий день и не могу понять, как применить слушателей событий форм к коллекциям. Данные меняются динамически в зависимости от ввода пользователя. Форма содержит коллекцию с данными в которых пользователь и заполняет поля. Для того, чтобы изменять данные динамически, я использую события 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 могу, но там поля уже менять нельзя. Может у кто-то сталкивался?
  • Вопрос задан
  • 670 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы