2016-11-28 90 views
2

我和Yii2有一些共同點。我嘗試在控制器的操作中添加/設置響應標頭。下面是代碼: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頭()方法 - 所有的作品都是正確的。

+0

看setDownloadHeaders功能 – ConorHolt

+0

@ConorHolt,不,不工作 的Yii :: $ APP-> response-> setDownloadHeaders($ fileName,'application/pdf',true,$ fileSize); – illatif

回答

1

方法set簽名需要字符串作爲值,所以最好用字符串替換數組,儘管它在非嚴格編碼中沒有任何區別。

反正 - 基於getDispositionHeaderValueContent-Disposition應該

'inline; filename=' . $fileName 

這將是更好地使用Yii的2種方法將文件發送到瀏覽器,如:

+0

反正不工作( – illatif

+0

當然,我可以使用本機header()函數,但我覺得我應該在Yii2方式工作 – illatif

+0

檢查我的更新答案 – Bizley

1

該Yii2超級簡單的方法來發送文件,下載

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

欲瞭解更多信息請參閱Response類the documentation