From 50703f8a82e1ba0554471ea28eb4e63cacddd04c Mon Sep 17 00:00:00 2001 From: Qiang Xue Date: Wed, 8 Jan 2014 20:57:36 -0500 Subject: [PATCH] Fixes #1844: Calling `Response::sendFile()` would cause sending the response twice --- framework/CHANGELOG.md | 1 + framework/yii/web/Response.php | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index b03ebe7..11f2fe5 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -24,6 +24,7 @@ Yii Framework 2 Change Log - Bug #1798: Fixed label attributes for array fields (zhuravljov) - Bug #1800: Better check for `$_SERVER['HTTPS']` in `yii\web\Request::getIsSecureConnection()` (ginus, samdark) - Bug #1827: Debugger toolbar is loaded twice if an action is calling `run()` to execute another action (qiangxue) +- Bug #1844: Calling `Response::sendFile()` would cause sending the response twice (qiangxue) - Bug: Fixed `Call to a member function registerAssetFiles() on a non-object` in case of wrong `sourcePath` for an asset bundle (samdark) - Bug: Fixed incorrect event name for `yii\jui\Spinner` (samdark) - Bug: Json::encode() did not handle objects that implement JsonSerializable interface correctly (cebe) diff --git a/framework/yii/web/Response.php b/framework/yii/web/Response.php index b4781df..a28f381 100644 --- a/framework/yii/web/Response.php +++ b/framework/yii/web/Response.php @@ -136,6 +136,10 @@ class Response extends \yii\base\Response */ public $version; /** + * @var boolean whether the response has been sent. If this is true, calling [[send()]] will do nothing. + */ + public $isSent = false; + /** * @var array list of HTTP status codes and the corresponding texts */ public static $httpStatuses = [ @@ -281,6 +285,11 @@ class Response extends \yii\base\Response */ public function send() { + if ($this->isSent) { + return; + } else { + $this->isSent = true; + } $this->trigger(self::EVENT_BEFORE_SEND); $this->prepare(); $this->trigger(self::EVENT_AFTER_PREPARE); @@ -300,6 +309,7 @@ class Response extends \yii\base\Response $this->statusText = 'OK'; $this->data = null; $this->content = null; + $this->isSent = false; } /**