From bf05ee2942f3e8ab4f736d5b25bfc189a3b3e666 Mon Sep 17 00:00:00 2001 From: Qiang Xue Date: Thu, 6 Jun 2013 17:10:22 -0400 Subject: [PATCH] Response WIP. --- framework/yii/logging/ProfileTarget.php | 2 +- framework/yii/web/Response.php | 147 +++++++++++++++++++++++++++++++- framework/yii/web/User.php | 2 +- 3 files changed, 147 insertions(+), 4 deletions(-) diff --git a/framework/yii/logging/ProfileTarget.php b/framework/yii/logging/ProfileTarget.php index f4522ac..d67762d 100644 --- a/framework/yii/logging/ProfileTarget.php +++ b/framework/yii/logging/ProfileTarget.php @@ -70,7 +70,7 @@ class CProfileLogRoute extends CWebLogRoute public function processLogs($logs) { $app = \Yii::$app; - if (!($app instanceof CWebApplication) || $app->getRequest()->getIsAjaxRequest()) + if (!($app instanceof CWebApplication) || $app->getRequest()->getIsAjax()) return; if ($this->getReport() === 'summary') diff --git a/framework/yii/web/Response.php b/framework/yii/web/Response.php index 6801191..ea1d57e 100644 --- a/framework/yii/web/Response.php +++ b/framework/yii/web/Response.php @@ -8,9 +8,11 @@ namespace yii\web; use Yii; +use XMLWriter; use yii\base\HttpException; use yii\helpers\FileHelper; use yii\helpers\Html; +use yii\helpers\Json; use yii\helpers\StringHelper; /** @@ -27,7 +29,13 @@ class Response extends \yii\base\Response * @see redirect */ public $ajaxRedirectCode = 278; - + /** + * @var string + */ + public $content; + /** + * @var HeaderCollection + */ private $_headers; /** @@ -44,6 +52,141 @@ class Response extends \yii\base\Response } /** + * Returns the current cache control setting as a string like sent in a header. + * @return string the cache control setting, or null if there is no such header specified + */ + public function getCacheControl() + { + return $this->getHeaders()->get('Cache-Control'); + } + + /** + * Sets the current cache control setting to be sent + * @param string $value the cache control header value + */ + public function setCacheControl($value) + { + $this->getHeaders()->set('Cache-Control', $value); + } + + /** + * Gets the ETag header to be sent + * @return string the ETag header, or false if none is set + */ + public function getEtag() + { + return $this->getHeaders()->get("ETag"); + } + + /** + * Sets the ETag header to be sent + * @param string $value the ETag header + */ + public function setEtag($value) + { + $this->getHeaders()->set("ETag", $value); + } + + /** + * Gets the last modified header to send + * @return string the last modified header, or null if none is set + */ + public function getLastModified() + { + return $this->getHeaders()->get("Last-Modified"); + } + + /** + * Sets the last modified header to send + * @param integer $value the unix time of the last modified date + */ + public function setLastModified($value) + { + $this->getHeaders()->set("Last-Modified", $value); + } + + /** + * Gets the content type header to send + * @return string the content type header, or null if none is set + */ + public function getContentType() + { + return $this->getHeaders()->get("Content-type"); + } + + /** + * Sets the content type header to send + * @param string $value the content type header + */ + public function setContentType($value) + { + $this->getHeaders()->set("Content-type", $value); + } + + /** + * Gets the content disposition header to send + * @return string the content disposition, or null if none is set + */ + public function getContentDisposition() + { + return $this->getHeaders()->get("Content-Disposition"); + } + + /** + * Sets the content disposition header to send + * @param string $contentDisposition the content disposition header + */ + public function setContentDisposition($contentDisposition) + { + $this->getHeaders()->set("Content-Disposition", $contentDisposition); + } + + public function renderJson($data) + { + $this->setContentType("application/json"); + $this->content = Json::encode($data); + } + + public function renderJsonp($callbackName, $data) + { + $this->setContentType("application/json"); + $data = Json::encode($data); + $this->content = "$callbackName($data)"; + } + + /** + * Sends the response to the client. + * @return boolean true if the response was sent + */ + public function send() + { + $this->sendHeaders(); + $this->sendContent(); + } + + /** + * Sends the response headers to the client + */ + protected function sendHeaders() + { + foreach ($this->_headers as $name => $values) { + foreach ($values as $value) { + header("$name: $value"); + } + } + $this->_headers->removeAll(); + } + + /** + * Sends the response content to the client + */ + protected function sendContent() + { + echo $this->content; + $this->content = null; + } + + /** * Sends a file to user. * @param string $fileName file name * @param string $content content to be set. @@ -258,7 +401,7 @@ class Response extends \yii\base\Response if (strpos($url, '/') === 0 && strpos($url, '//') !== 0) { $url = Yii::$app->getRequest()->getHostInfo() . $url; } - if (Yii::$app->getRequest()->getIsAjaxRequest()) { + if (Yii::$app->getRequest()->getIsAjax()) { $statusCode = $this->ajaxRedirectCode; } header('Location: ' . $url, true, $statusCode); diff --git a/framework/yii/web/User.php b/framework/yii/web/User.php index 79665ae..5522bbb 100644 --- a/framework/yii/web/User.php +++ b/framework/yii/web/User.php @@ -280,7 +280,7 @@ class User extends Component public function loginRequired() { $request = Yii::$app->getRequest(); - if (!$request->getIsAjaxRequest()) { + if (!$request->getIsAjax()) { $this->setReturnUrl($request->getUrl()); } if ($this->loginUrl !== null) {