/** * * @todo Consider using request and response as controller constructor * params? */ function __construct() { $this->_server = Oops_Server::getInstance(); $this->_request = Oops_Server::getRequest(); $this->_response = Oops_Server::getResponse(); $this->_config = Oops_Server::getConfig(); }
/** * Singleton pattern implementaion * * @static * @param string template name * @return Oops_Template */ public static function getInstance($tplname) { $tplname = strtolower($tplname); static $a = array(); if (!isset($a[$tplname])) { $a[$tplname] = new Oops_Template($tplname); } $a[$tplname]->_request = Oops_Server::getRequest(); $a[$tplname]->_response = Oops_Server::getResponse(); return $a[$tplname]; }
/** * Handle the request * * @todo proceed 301, 302, 404 and other statuses. Current response object should be used for this, or Oops_Server::Run should return a response object instead of text * * @return void */ function _handle() { if ($this->_isHandled) { return; } $server = Oops_Server::newInstance(); $response = $server->Run($this->_request); while ($response->isRedirect() && $this->_redirectLimit--) { /** * @todo do something, use Location header */ $this->_request = new Oops_Server_Request_Custom($response->getHeader("Location")); $response = $server->Run($this->_request); } Oops_Server::popInstance(); $server = null; if (!$response->isRedirect()) { $this->_content = $response->body; /* translate headers in order to deliver control headers like 'X-Accel-Expires' */ $childHeaders = $response->getHeaders(); if (count($childHeaders)) { $parentHeaders = Oops_Server::getResponse()->getHeaders(); foreach ($childHeaders as $k => $v) { if (!isset($parentHeaders[$k])) { Oops_Server::getResponse()->setHeader($k, $v); } elseif (is_array($parentHeaders[$k])) { Oops_Utils::ToArray($v); foreach ($v as $vv) { Oops_Server::getResponse()->setHeader($k, $vv, false); } } } } } $this->_isHandled = true; $this->_position = 0; }