【问题标题】:Yii2: how to change/add response headers?Yii2:如何更改/添加响应头?
【发布时间】:2017-04-12 01:30:17
【问题描述】:

我对 Yii2 有一些不满。我尝试在控制器的操作中添加/设置响应标头。下面是代码:

   Yii::$app->response->headers->set('Content-type', ['application/pdf']);
   Yii::$app->response->headers->set('Content-Disposition', ['inline', 'filename=' . $fileName]);
   Yii::$app->response->headers->set('Content-Transfer-Encoding', ['binary']);
   Yii::$app->response->headers->set('Content-Length', [$fileSize]);
   Yii::$app->response->headers->set('Accept-Ranges', ['bytes']);

   return readfile($filePath);

如果我将 set() 更改为 add(),或者将第二个参数从数组更改为字符串,那么不会有任何反应。 pdf文件未打开。但如果我使用原生 PHP header() 方法 - 一切正常。

【问题讨论】:

  • 查看Response类中的setDownloadHeaders函数
  • @ConorHolt,不,不起作用 Yii::$app->response->setDownloadHeaders($fileName, 'application/pdf', true, $fileSize);

标签: php http web yii2


【解决方案1】:

方法set签名需要字符串作为值,所以最好用字符串替换你的数组,尽管它在非严格编码中没有任何区别。

无论如何——基于getDispositionHeaderValueContent-Disposition应该是

'inline; filename=' . $fileName

最好使用 Yii 2 方法将文件发送到浏览器,例如:

【讨论】:

  • 当然,我可以使用原生 header() 函数,但我认为我应该以 Yii2 方式工作
  • 我只需要在浏览器中打开 pdf 文档 :)
  • 所以sendFile 正是您所需要的。
  • 该方法让我可以保存文件,所以我需要在浏览器窗口中打开 pdf(默认为 PDFViewer.js)。
  • inline参数
【解决方案2】:

Yii2 超级简单的下载文件发送方式是

public function actionDownload()
{
    return \Yii::$app->response->sendFile('path/to/file.txt');
}

欲了解更多信息,请参阅the documentation

【讨论】:

    猜你喜欢
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2013-11-14
    相关资源
    最近更新 更多