Я работаю над проектом по созданию маркетинговых кампаний. Среди других свойств каждая Кампания ассоциировала объект AudioFile, который указывает аудиофайл, который будет воспроизводиться с этой кампанией. Моя форма создания кампании выглядит так:
$form = $this->createFormBuilder($CampaignObject)
->add('audiofile', 'entity', array('class'=>'AcmeDemoBundle:AudioFiles', 'property'=>'name', 'multiple'=>false, 'expanded'=>true, 'mapped'=>true))
/*other fields */
Кроме того, я хочу дать пользователю возможность загружать новый аудиофайл "на лету" при создании кампании. Как только он будет загружен, и новый объект сущности аудиофайла будет создан и сохранен в базе данных, я хочу динамически изменить поле сущности, чтобы отразить это изменение в списке аудиофайлов, я хочу сделать это, не перезагружая всю страницу, чтобы не потерять поля, которые уже заполнены, но я не могу понять, как это достичь. Любая помощь будет оценена по достоинству.
спасибо
Ну, Symfony - это фреймворк, что означает, что для достижения того, что вы хотите, вам придется реализовать некоторые функции Javascript. Также обратите внимание, что форма является stateful, и она создается в вашем контроллере.
Таким образом, вам нужно будет сохранить свой AudioFile
а затем связать его с Campaign
. Это достижимо благодаря наличию отдельных форм, которые почтительно принимают файлы и кампании.
Спасибо. Наконец я нашел обходное решение. Я создал список аудио из getRepository независимо от формы, добавив кнопку выбора для каждой кампании. Когда пользователь нажимает кнопку выбора, я заполняю скрытое поле с идентификатором выбранного аудиофайла. Затем при отправке в контроллер я вручную получаю объект AudioFile этим идентификатором и выполняю Doctrine $campaign-> addAudiofile ($ AudioFile) перед сохранением.