Browse Source

draft idea of action based responses

tags/2.0.0-beta
Carsten Brandt 12 years ago
parent
commit
82c978f86a
  1. 21
      framework/yii/base/Action.php
  2. 1
      framework/yii/base/Application.php
  3. 1
      framework/yii/base/Controller.php
  4. 4
      framework/yii/base/InlineAction.php
  5. 14
      framework/yii/console/Application.php
  6. 16
      framework/yii/web/Application.php

21
framework/yii/base/Action.php

@ -7,6 +7,8 @@
namespace yii\base;
use Yii;
/**
* Action is the base class for all controller action classes.
*
@ -40,6 +42,21 @@ class Action extends Component
*/
public $controller;
private $_response;
public function getResponse()
{
if ($this->_response === null) {
$this->_response = Yii::$app->createResponse();
}
return $this->_response;
}
public function setResponse($response)
{
$this->_response = $response;
}
/**
* Constructor.
* @param string $id the ID of this action
@ -75,6 +92,8 @@ class Action extends Component
throw new InvalidConfigException(get_class($this) . ' must define a "run()" method.');
}
$args = $this->controller->bindActionParams($this, $params);
return call_user_func_array(array($this, 'run'), $args);
$response = $this->getResponse();
$response->result = call_user_func_array(array($this, 'run'), $args);
return $response;
}
}

1
framework/yii/base/Application.php

@ -155,6 +155,7 @@ abstract class Application extends Module
*/
abstract public function handleRequest($request);
public abstract function createResponse();
private $_runtimePath;

1
framework/yii/base/Controller.php

@ -111,6 +111,7 @@ class Controller extends Component
$oldAction = $this->action;
$this->action = $action;
$result = null;
// TODO beforeAction may also create a response somehow.
if ($this->module->beforeAction($action)) {
if ($this->beforeAction($action)) {
$result = $action->runWithParams($params);

4
framework/yii/base/InlineAction.php

@ -44,6 +44,8 @@ class InlineAction extends Action
public function runWithParams($params)
{
$args = $this->controller->bindActionParams($this, $params);
return call_user_func_array(array($this->controller, $this->actionMethod), $args);
$response = $this->getResponse();
$response->result = call_user_func_array(array($this->controller, $this->actionMethod), $args);
return $response;
}
}

14
framework/yii/console/Application.php

@ -93,22 +93,18 @@ class Application extends \yii\base\Application
{
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;
}
$response = $this->getResponse();
$response->exitStatus = (int)$result;
return $response;
}
/**
* Returns the response component.
* @return Response the response component
*/
public function getResponse()
public function createResponse()
{
return $this->getComponent('response');
return new Response();
}
/**

16
framework/yii/web/Application.php

@ -65,16 +65,8 @@ class Application extends \yii\base\Application
$params = array_splice($this->catchAll, 1);
}
try {
$result = $this->runAction($route, $params);
if ($result instanceof Response) {
return $result;
} else {
$response = $this->getResponse();
if ($result !== null) {
$response->setContent($result);
}
return $response;
}
$response = $this->runAction($route, $params);
return $response;
} catch (InvalidRouteException $e) {
throw new HttpException(404, $e->getMessage(), $e->getCode(), $e);
}
@ -119,9 +111,9 @@ class Application extends \yii\base\Application
* Returns the response component.
* @return Response the response component
*/
public function getResponse()
public function createResponse()
{
return $this->getComponent('response');
return new Response();
}
/**

Loading…
Cancel
Save