提问人:Hasina Njaratin 提问时间:10/5/2023 更新时间:10/12/2023 访问量:28
Drupal 批处理 - 如何在完成回调中使用 StreamedResponse 重定向
Drupal batch process - how to redirect with StreamedResponse in finish callback
问:
我正在批量导出许多实体,然后下载结果文件。这是我完成回调的一部分:
....
if ($success && !empty($results['file'])) {
// Create a response to trigger the file download.
$response = new StreamedResponse(function () use ($results) {
readfile($results['file']);
unlink($results['file']);
});
// Set response headers.
$response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
$response->headers->set('Content-Disposition', 'attachment; filename="exported_values_' . time() . '.xlsx"');
$response->headers->set('Cache-Control', 'private');
// Send the response.
$response->send();
....
导出文件下载成功。
但是,我想在之后重定向到特定页面,但不想停留在批处理页面上。
我尝试添加到函数中;然后也在外面,但结果不好,因为它正确重定向,但它不再下载文件。header('Location: xxurlxx')
StreamedResponse
$response->headers->set('Location', xxurlxx);
有什么想法吗?
答:
0赞
LouisCuny
10/12/2023
#1
当您从 php 发送文件时,您正在发送对请求的响应。所以请求完成了。之后你什么都做不了。
一种方法是在 Javascript 中做到这一点,但这很棘手 另一种方法是更改您的“下载文件”链接,以在第一页上重定向 javascript 之外,在新选项卡中打开文件
评论