mirror of
https://github.com/yiisoft/yii2.git
synced 2025-12-01 23:51:12 +08:00
Revert "Merge pull request #548 from cebe/action-response"
This reverts commit9d7597d61a, reversing changes made to6b6390f72b.
This commit is contained in:
@@ -7,8 +7,6 @@
|
||||
|
||||
namespace yii\base;
|
||||
|
||||
use Yii;
|
||||
|
||||
/**
|
||||
* Action is the base class for all controller action classes.
|
||||
*
|
||||
@@ -41,31 +39,6 @@ class Action extends Component
|
||||
* @var Controller the controller that owns this action
|
||||
*/
|
||||
public $controller;
|
||||
/**
|
||||
* @var Response
|
||||
*/
|
||||
private $_response;
|
||||
|
||||
|
||||
/**
|
||||
* @return Response|\yii\console\Response|\yii\web\Response
|
||||
*/
|
||||
public function getResponse()
|
||||
{
|
||||
if ($this->_response === null) {
|
||||
// TODO use applications response factory here
|
||||
//$this->_response = new Response();
|
||||
}
|
||||
return $this->_response;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Response $response
|
||||
*/
|
||||
public function setResponse($response)
|
||||
{
|
||||
$this->_response = $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
|
||||
@@ -155,6 +155,7 @@ abstract class Application extends Module
|
||||
*/
|
||||
abstract public function handleRequest($request);
|
||||
|
||||
|
||||
private $_runtimePath;
|
||||
|
||||
/**
|
||||
|
||||
@@ -15,7 +15,7 @@ use Yii;
|
||||
* @author Qiang Xue <qiang.xue@gmail.com>
|
||||
* @since 2.0
|
||||
*/
|
||||
abstract class Controller extends Component
|
||||
class Controller extends Component
|
||||
{
|
||||
/**
|
||||
* @event ActionEvent an event raised right before executing a controller action.
|
||||
@@ -110,38 +110,21 @@ abstract class Controller extends Component
|
||||
if ($action !== null) {
|
||||
$oldAction = $this->action;
|
||||
$this->action = $action;
|
||||
$result = null;
|
||||
if ($this->module->beforeAction($action)) {
|
||||
if ($this->beforeAction($action)) {
|
||||
$result = $action->runWithParams($params);
|
||||
if ($result !== null) {
|
||||
$this->handleActionResult($result, $action);
|
||||
}
|
||||
$this->afterAction($action);
|
||||
}
|
||||
$this->module->afterAction($action);
|
||||
}
|
||||
$this->action = $oldAction;
|
||||
return $action->getResponse();
|
||||
return $result;
|
||||
} else {
|
||||
throw new InvalidRouteException('Unable to resolve the request: ' . $this->getUniqueId() . '/' . $id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the return value of an action
|
||||
* @param mixed $result
|
||||
* @param Action $action
|
||||
*/
|
||||
protected abstract function handleActionResult(&$result, $action);
|
||||
|
||||
/**
|
||||
* @return Response the response object of the current action. null if no action is running
|
||||
*/
|
||||
public function getResponse()
|
||||
{
|
||||
return $this->action !== null ? $this->action->getResponse() : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs a request specified in terms of a route.
|
||||
* The route can be either an ID of an action within this controller or a complete route consisting
|
||||
|
||||
@@ -9,7 +9,6 @@ namespace yii\base;
|
||||
|
||||
use Yii;
|
||||
use yii\web\HttpException;
|
||||
use yii\web\Response;
|
||||
|
||||
/**
|
||||
* ErrorHandler handles uncaught PHP errors and exceptions.
|
||||
@@ -90,13 +89,8 @@ class ErrorHandler extends Component
|
||||
|
||||
$useErrorView = !YII_DEBUG || $exception instanceof UserException;
|
||||
|
||||
if (Yii::$app->controller !== null) {
|
||||
$response = Yii::$app->controller->getResponse();
|
||||
$response->getHeaders()->removeAll();
|
||||
}
|
||||
if (empty($response)) {
|
||||
$response = new Response();
|
||||
}
|
||||
$response = Yii::$app->getResponse();
|
||||
$response->getHeaders()->removeAll();
|
||||
|
||||
if ($useErrorView && $this->errorAction !== null) {
|
||||
$result = Yii::$app->runAction($this->errorAction);
|
||||
|
||||
@@ -571,7 +571,7 @@ abstract class Module extends Component
|
||||
* If the route is empty, the method will use [[defaultRoute]].
|
||||
* @param string $route the route that specifies the action.
|
||||
* @param array $params the parameters to be passed to the action
|
||||
* @return Response the resulting response of the action.
|
||||
* @return mixed the result of the action.
|
||||
* @throws InvalidRouteException if the requested route cannot be resolved into an action successfully
|
||||
*/
|
||||
public function runAction($route, $params = array())
|
||||
@@ -582,9 +582,9 @@ abstract class Module extends Component
|
||||
list($controller, $actionID) = $parts;
|
||||
$oldController = Yii::$app->controller;
|
||||
Yii::$app->controller = $controller;
|
||||
$response = $controller->runAction($actionID, $params);
|
||||
$result = $controller->runAction($actionID, $params);
|
||||
Yii::$app->controller = $oldController;
|
||||
return $response;
|
||||
return $result;
|
||||
} else {
|
||||
throw new InvalidRouteException('Unable to resolve the request "' . trim($this->getUniqueId() . '/' . $route, '/') . '".');
|
||||
}
|
||||
|
||||
@@ -88,13 +88,43 @@ class Application extends \yii\base\Application
|
||||
* Handles the specified request.
|
||||
* @param Request $request the request to be handled
|
||||
* @return Response the resulting response
|
||||
* @throws Exception if the route is invalid
|
||||
*/
|
||||
public function handleRequest($request)
|
||||
{
|
||||
list ($route, $params) = $request->resolve();
|
||||
$result = $this->runAction($route, $params);
|
||||
if ($result instanceof Response) {
|
||||
return $result;
|
||||
} else {
|
||||
$response = $this->getResponse();
|
||||
$response->exitStatus = (int)$result;
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the response component.
|
||||
* @return Response the response component
|
||||
*/
|
||||
public function getResponse()
|
||||
{
|
||||
return $this->getComponent('response');
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs a controller action specified by a route.
|
||||
* This method parses the specified route and creates the corresponding child module(s), controller and action
|
||||
* instances. It then calls [[Controller::runAction()]] to run the action with the given parameters.
|
||||
* If the route is empty, the method will use [[defaultRoute]].
|
||||
* @param string $route the route that specifies the action.
|
||||
* @param array $params the parameters to be passed to the action
|
||||
* @return integer the status code returned by the action execution. 0 means normal, and other values mean abnormal.
|
||||
* @throws Exception if the route is invalid
|
||||
*/
|
||||
public function runAction($route, $params = array())
|
||||
{
|
||||
try {
|
||||
return $this->runAction($route, $params);
|
||||
return parent::runAction($route, $params);
|
||||
} catch (InvalidRouteException $e) {
|
||||
throw new Exception(\Yii::t('yii', 'Unknown command "{command}".', array('{command}' => $route)), 0, $e);
|
||||
}
|
||||
@@ -126,6 +156,9 @@ class Application extends \yii\base\Application
|
||||
'request' => array(
|
||||
'class' => 'yii\console\Request',
|
||||
),
|
||||
'response' => array(
|
||||
'class' => 'yii\console\Response',
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,16 +134,6 @@ class Controller extends \yii\base\Controller
|
||||
return $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the return value of an action
|
||||
* @param mixed $result
|
||||
* @param Action $action
|
||||
*/
|
||||
protected function handleActionResult(&$result, $action)
|
||||
{
|
||||
$action->getResponse()->exitStatus = (int)$result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats a string with ANSI codes
|
||||
*
|
||||
|
||||
@@ -65,7 +65,16 @@ class Application extends \yii\base\Application
|
||||
$params = array_splice($this->catchAll, 1);
|
||||
}
|
||||
try {
|
||||
return $this->runAction($route, $params);
|
||||
$result = $this->runAction($route, $params);
|
||||
if ($result instanceof Response) {
|
||||
return $result;
|
||||
} else {
|
||||
$response = $this->getResponse();
|
||||
if ($result !== null) {
|
||||
$response->setContent($result);
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
} catch (InvalidRouteException $e) {
|
||||
throw new HttpException(404, $e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
@@ -106,6 +115,15 @@ class Application extends \yii\base\Application
|
||||
return $this->getComponent('request');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the response component.
|
||||
* @return Response the response component
|
||||
*/
|
||||
public function getResponse()
|
||||
{
|
||||
return $this->getComponent('response');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the session component.
|
||||
* @return Session the session component
|
||||
@@ -144,6 +162,9 @@ class Application extends \yii\base\Application
|
||||
'request' => array(
|
||||
'class' => 'yii\web\Request',
|
||||
),
|
||||
'response' => array(
|
||||
'class' => 'yii\web\Response',
|
||||
),
|
||||
'session' => array(
|
||||
'class' => 'yii\web\Session',
|
||||
),
|
||||
|
||||
@@ -325,7 +325,7 @@ class CaptchaAction extends Action
|
||||
*/
|
||||
protected function setHttpHeaders()
|
||||
{
|
||||
$this->getResponse()->getHeaders()
|
||||
Yii::$app->getResponse()->getHeaders()
|
||||
->set('Pragma', 'public')
|
||||
->set('Expires', '0')
|
||||
->set('Cache-Control', 'must-revalidate, post-check=0, pre-check=0')
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
namespace yii\web;
|
||||
|
||||
use Yii;
|
||||
use yii\base\Action;
|
||||
use yii\base\InlineAction;
|
||||
|
||||
/**
|
||||
@@ -62,16 +61,6 @@ class Controller extends \yii\base\Controller
|
||||
return $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the return value of an action
|
||||
* @param mixed $result
|
||||
* @param Action $action
|
||||
*/
|
||||
protected function handleActionResult(&$result, $action)
|
||||
{
|
||||
$action->getResponse()->setContent($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a URL using the given route and parameters.
|
||||
*
|
||||
|
||||
@@ -74,8 +74,8 @@ class HttpCache extends ActionFilter
|
||||
$etag = $this->generateEtag($seed);
|
||||
}
|
||||
|
||||
$response = $action->getResponse();
|
||||
$this->sendCacheControlHeader($response);
|
||||
$this->sendCacheControlHeader();
|
||||
$response = Yii::$app->getResponse();
|
||||
if ($etag !== null) {
|
||||
$response->getHeaders()->set('Etag', $etag);
|
||||
}
|
||||
@@ -109,13 +109,12 @@ class HttpCache extends ActionFilter
|
||||
|
||||
/**
|
||||
* Sends the cache control header to the client
|
||||
* @param Response $response
|
||||
* @see cacheControl
|
||||
*/
|
||||
protected function sendCacheControlHeader($response)
|
||||
protected function sendCacheControlHeader()
|
||||
{
|
||||
session_cache_limiter('public');
|
||||
$headers = $response->getHeaders();
|
||||
$headers = Yii::$app->getResponse()->getHeaders();
|
||||
$headers->set('Pragma');
|
||||
if ($this->cacheControlHeader !== null) {
|
||||
$headers->set('Cache-Control', $this->cacheControlHeader);
|
||||
|
||||
@@ -788,7 +788,7 @@ class Request extends \yii\base\Request
|
||||
$this->_csrfCookie = $this->getCookies()->get($this->csrfTokenName);
|
||||
if ($this->_csrfCookie === null) {
|
||||
$this->_csrfCookie = $this->createCsrfCookie();
|
||||
Yii::$app->controller->getResponse()->getCookies()->add($this->_csrfCookie);
|
||||
Yii::$app->getResponse()->getCookies()->add($this->_csrfCookie);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -283,7 +283,8 @@ class User extends Component
|
||||
$this->setReturnUrl($request->getUrl());
|
||||
}
|
||||
if ($this->loginUrl !== null) {
|
||||
Yii::$app->controller->getResponse()->redirect($this->loginUrl)->send();
|
||||
$response = Yii::$app->getResponse();
|
||||
$response->redirect($this->loginUrl)->send();
|
||||
exit();
|
||||
} else {
|
||||
throw new HttpException(403, Yii::t('yii', 'Login Required'));
|
||||
@@ -371,7 +372,7 @@ class User extends Component
|
||||
$cookie = new Cookie($this->identityCookie);
|
||||
$cookie->value = $value;
|
||||
$cookie->expire = time() + (int)$data[2];
|
||||
Yii::$app->controller->getResponse()->getCookies()->add($cookie);
|
||||
Yii::$app->getResponse()->getCookies()->add($cookie);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -394,7 +395,7 @@ class User extends Component
|
||||
$duration,
|
||||
));
|
||||
$cookie->expire = time() + $duration;
|
||||
Yii::$app->controller->getResponse()->getCookies()->add($cookie);
|
||||
Yii::$app->getResponse()->getCookies()->add($cookie);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -428,7 +429,7 @@ class User extends Component
|
||||
$this->sendIdentityCookie($identity, $duration);
|
||||
}
|
||||
} elseif ($this->enableAutoLogin) {
|
||||
Yii::$app->controller->getResponse()->getCookies()->remove(new Cookie($this->identityCookie));
|
||||
Yii::$app->getResponse()->getCookies()->remove(new Cookie($this->identityCookie));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ class VerbFilter extends Behavior
|
||||
if (!in_array($verb, $allowed)) {
|
||||
$event->isValid = false;
|
||||
// http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.7
|
||||
$event->action->getResponse()->getHeaders()->set('Allow', implode(', ', $allowed));
|
||||
Yii::$app->getResponse()->getHeaders()->set('Allow', implode(', ', $allowed));
|
||||
throw new HttpException(405, 'Method Not Allowed. This url can only handle the following request methods: ' . implode(', ', $allowed));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user