Как отдать файл и перезагрузить страницу?
Вопрос собственно описан в теме, существует ли способ вернуть файл на скачивание в браузере из контроллера Symfony и перезагрузить страницу, либо же сделать редирект?
Предисловие: есть некая форма, при заполнении которой мы хотим сделать выгрузку и скачать файл, если поступить данным образом return new BinaryFileResponse($createdFilePath);, то дальнейшие действия с формой заблокированы и кнопки неактивны, приходится в ручном режиме перезагружать страницу.
Данное поведение не совсем юзабельно, хочется продолжить работу не прибегая к сторонним манипуляциям.
Из этого нарисовался такой вопрос, гугл помочь не смог, есть ли способ заюзать что-то подобноe?
Чтобы поведение было примерно таким: скачался файл, перезагрузилась страница или файл скачался перед новым рендерингом.
return $this->renderWithExtraParams(
'/tmpls/any.html.twig',
[
'form' => $this->form($formData)->createView(),
'file' => new BinaryFileResponse($createdFilePath)
]
);
Ответы (1 шт):
Это делается не в контроллере Symfony. Отдавая бинарный файл, в заголовках не должно быть никаких редиректов. И тело ответа полностью забирает содержимое бинарного файла, в конец ответа тоже ничего невозможно внедрить.
Возможно, и есть какие-то типы заголовков HTTP, про которых я не в курсе, которые могут выполнить redirect по завершению скачивания файла. Но правильнее данный функционал реализовывать через javascript на странице рядом с кодом самой формы. Можно отдавать файл открывая новую вкладку браузера через window.open().