Yii2 輸出檔案下載響應

Wi1dcard發表於2019-06-20

最近為了儘可能優雅地實現產品需求,天天看 Yii 原始碼,感覺還是非常爽的。本文將要介紹如何使用 Yii 內建的方法,輸出檔案、流、字串為下載響應。

通過檢視 yii\web\Response 原始碼可知,其提供如下方法:


public function sendFile($filePath, $attachmentName = null, $options = []);

public function sendContentAsFile($content, $attachmentName, $options = []);

public function sendStreamAsFile($handle, $attachmentName, $options = []);

那麼如何在控制器內呼叫此方法輸出呢?

兩種方案:

public function actionIndex()
{
    return \Yii::$app->getResponse()->sendFile(...); // `sendFile` 返回 self
}

public function actionIndex()
{
    \Yii::$app->getResponse()->sendFile(...);
    return null; // or `return;` or do nothing.
}

根據 yii\web\Application::handleRequest 可知:Yii 會判斷 action 返回值。

若是 yii\web\Response 例項則直接返回給 \yii\base\Application::run 函式進行輸出。

否則判斷其是否為 null,若是,則什麼都不做;則我們設定的 sendFile 就會有效。

我感謝自己平凡,敢愛敢恨沒負擔。
我感謝自己不凡,可愛可恨都包攬。

相關文章