diff --git a/framework/yii/web/Response.php b/framework/yii/web/Response.php index a16d04d..f337fbb 100644 --- a/framework/yii/web/Response.php +++ b/framework/yii/web/Response.php @@ -118,7 +118,7 @@ class Response extends \yii\base\Response 511 => 'Network Authentication Required', ); - private $_statusCode = 200; + private $_statusCode; /** * @var HeaderCollection */ @@ -199,6 +199,14 @@ class Response extends \yii\base\Response $this->sendContent(); } + public function reset() + { + $this->_headers = null; + $this->_statusCode = null; + $this->statusText = null; + $this->content = null; + } + /** * Sends the response headers to the client */ @@ -207,7 +215,10 @@ class Response extends \yii\base\Response if (headers_sent()) { return; } - header("HTTP/{$this->version} " . $this->getStatusCode() . " {$this->statusText}"); + $statusCode = $this->getStatusCode(); + if ($statusCode !== null) { + header("HTTP/{$this->version} $statusCode {$this->statusText}"); + } if ($this->_headers) { $headers = $this->getHeaders(); foreach ($headers as $name => $values) { @@ -334,10 +345,10 @@ class Response extends \yii\base\Response ob_start(); Yii::$app->end(0, false); ob_end_clean(); - echo $content; + $this->content = $content; exit(0); } else { - echo $content; + $this->content = $content; } } diff --git a/tests/unit/framework/web/ResponseTest.php b/tests/unit/framework/web/ResponseTest.php index 5da9b8c..74d90cf 100644 --- a/tests/unit/framework/web/ResponseTest.php +++ b/tests/unit/framework/web/ResponseTest.php @@ -1,45 +1,20 @@ mockApplication(); - $this->reset(); - } - - protected function reset() - { - static::$headers = array(); - static::$httpResponseCode = 200; + $this->response = new Response; } public function rightRanges() @@ -60,14 +35,15 @@ class ResponseTest extends \yiiunit\TestCase { $content = $this->generateTestFileContent(); $_SERVER['HTTP_RANGE'] = 'bytes=' . $rangeHeader; - $sent = $this->runSendFile('testFile.txt', $content, null); - - $this->assertEquals($expectedFile, $sent); - $this->assertTrue(in_array('HTTP/1.1 206 Partial Content', static::$headers)); - $this->assertTrue(in_array('Accept-Ranges: bytes', static::$headers)); - $this->assertArrayHasKey('Content-Range: bytes ' . $expectedHeader . '/' . StringHelper::strlen($content), array_flip(static::$headers)); - $this->assertTrue(in_array('Content-Type: text/plain', static::$headers)); - $this->assertTrue(in_array('Content-Length: ' . $length, static::$headers)); + $this->response->sendFile('testFile.txt', $content, null, false); + + $this->assertEquals($expectedFile, $this->response->content); + $this->assertEquals(206, $this->response->statusCode); + $headers = $this->response->headers; + $this->assertEquals("bytes", $headers->get('Accept-Ranges')); + $this->assertEquals("bytes " . $expectedHeader . '/' . StringHelper::strlen($content), $headers->get('Content-Range')); + $this->assertEquals('text/plain', $headers->get('Content-Type')); + $this->assertEquals("$length", $headers->get('Content-Length')); } public function wrongRanges() @@ -91,21 +67,11 @@ class ResponseTest extends \yiiunit\TestCase $content = $this->generateTestFileContent(); $_SERVER['HTTP_RANGE'] = 'bytes=' . $rangeHeader; - $this->runSendFile('testFile.txt', $content, null); + $this->response->sendFile('testFile.txt', $content, null, false); } protected function generateTestFileContent() { return '12ёжик3456798áèabcdefghijklmnopqrstuvwxyz!"§$%&/(ёжик)=?'; } - - protected function runSendFile($fileName, $content, $mimeType) - { - ob_start(); - ob_implicit_flush(false); - $response = new Response(); - $response->sendFile($fileName, $content, $mimeType, false); - $file = ob_get_clean(); - return $file; - } }