Я использую прослушиватель событий для динамического изменения данных на основе пользовательского ввода. Каждый раз, когда я использую события PRE_SET_DATA
и PRE_SUBMIT
для набора данных и выбора полей. Вот простой пример действий из PRE_SUBMIT
:
// 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 показывает ошибку:
Ребенок "n" не существует.
И эта проблема возникает только тогда, когда я пытаюсь получить данные новой коллекции, которая была добавлена динамически. Поэтому я не могу перейти к полю коллекции и изменить варианты, поэтому получаю сообщение об ошибке, что моего нового значения нет в списке выбора.
Интересно, что у $data['shares']
есть все данные для новых элементов коллекции, а у $form->get('shares')
нет:
var_dump(count($event->getData()['shares'])) - return 1;
var_dump(count($form->get('shares'))) - return 0;
Означает ли это, что мой PRE_SUBMIT
работает до того, как появится функциональность коллекции Symfony?
Кто-то знает, как это исправить?