Drupal 批处理 - 如何在完成回调中使用 StreamedResponse 重定向

Drupal batch process - how to redirect with StreamedResponse in finish callback

提问人:Hasina Njaratin 提问时间:10/5/2023 更新时间:10/12/2023 访问量:28

问:

我正在批量导出许多实体,然后下载结果文件。这是我完成回调的一部分:

    ....
    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);

有什么想法吗?

HTTP 响应 httpresponse drupal-batch

评论


答:

0赞 LouisCuny 10/12/2023 #1

当您从 php 发送文件时,您正在发送对请求的响应。所以请求完成了。之后你什么都做不了。

一种方法是在 Javascript 中做到这一点,但这很棘手 另一种方法是更改您的“下载文件”链接,以在第一页上重定向 javascript 之外,在新选项卡中打开文件