diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index b03ebe78a1..11f2fe5ae4 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 b4781dfbd7..a28f381063 100644 --- a/framework/yii/web/Response.php +++ b/framework/yii/web/Response.php @@ -135,6 +135,10 @@ class Response extends \yii\base\Response * or '1.1' if that is not available. */ 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 */ @@ -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; } /**