Source for file Response.class.php

Documentation is available at Response.class.php

  1. /**
  2.  * Класс Response.
  3.  *
  4.  * @package energine
  5.  * @subpackage core
  6.  * @author 1m.dm
  7.  * @copyright ColoCall 2006
  8.  * @version $Id: fsource_energine_core_frameworkResponse.class.php.html,v 1.1 2007/09/17 14:32:34 pavka Exp $
  9.  */
  10.  
  11. require_once 'core/framework/Object.class.php';
  12.  
  13. /**
  14.  * HTTP-ответ.
  15.  *
  16.  * @package energine
  17.  * @subpackage core
  18.  * @final
  19.  */
  20. final class Response extends Object {
  21.  
  22.     /**
  23.      * @access private
  24.      * @var Response единый для всей системы экземпляр класса Response
  25.      */
  26.     private static $instance;
  27.  
  28.     /**
  29.      * @access private
  30.      * @var string строка статуса ответа
  31.      */
  32.     private $statusLine;
  33.  
  34.     /**
  35.      * @access private
  36.      * @var array заголовки ответа
  37.      */
  38.     private $headers;
  39.  
  40.     /**
  41.      * @access private
  42.      * @var array cookies ответа
  43.      */
  44.     private $cookies;
  45.  
  46.     /**
  47.      * @access private
  48.      * @var string тело ответа
  49.      */
  50.     private $body;
  51.  
  52.     /**
  53.      * @access private
  54.      * @var array описание кодов ответа
  55.      */
  56.     private $reasonPhrases = array(
  57.         100 => 'Continue',
  58.         101 => 'Switching Protocols',
  59.         200 => 'OK',
  60.         201 => 'Created',
  61.         202 => 'Accepted',
  62.         203 => 'Non-Authoritative Information',
  63.         204 => 'No Content',
  64.         205 => 'Reset Content',
  65.         206 => 'Partial Content',
  66.         300 => 'Multiple Choices',
  67.         301 => 'Moved Permanently',
  68.         302 => 'Found',
  69.         303 => 'See Other',
  70.         304 => 'Not Modified',
  71.         305 => 'Use Proxy',
  72.         307 => 'Temporary Redirect',
  73.         400 => 'Bad Request',
  74.         401 => 'Unauthorized',
  75.         402 => 'Payment Required',
  76.         403 => 'Forbidden',
  77.         404 => 'Not Found',
  78.         405 => 'Method Not Allowed',
  79.         406 => 'Not Acceptable',
  80.         407 => 'Proxy Authentication Required',
  81.         408 => 'Request Time-out',
  82.         409 => 'Conflict',
  83.         410 => 'Gone',
  84.         411 => 'Length Required',
  85.         412 => 'Precondition Failed',
  86.         413 => 'Request Entity Too Large',
  87.         414 => 'Request-URI Too Large',
  88.         415 => 'Unsupported Media Type',
  89.         416 => 'Requested range not satisfiable',
  90.         417 => 'Expectation Failed',
  91.         500 => 'Internal Server Error',
  92.         501 => 'Not Implemented',
  93.         502 => 'Bad Gateway',
  94.         503 => 'Service Unavailable',
  95.         504 => 'Gateway Time-out',
  96.         505 => 'HTTP Version not supported'
  97.     );
  98.  
  99.     /**
  100.      * Конструктор класса.
  101.      *
  102.      * @access public
  103.      * @return void 
  104.      */
  105.     public function __construct({
  106.         parent::__construct();
  107.  
  108.         $this->setStatus(200);
  109.         $this->headers = array();
  110.         $this->cookies = array();
  111.         $this->body = '';
  112.     }
  113.  
  114.     /**
  115.      * Возвращает единый для всей системы экземпляр класса Response.
  116.      *
  117.      * @access public
  118.      * @static
  119.      * @return Response 
  120.      */
  121.     static public function getInstance({
  122.         if (!isset(self::$instance)) {
  123.             self::$instance new Response;
  124.         }
  125.         return self::$instance;
  126.     }
  127.  
  128.     /**
  129.      * Устанавливает статус ответа.
  130.      *
  131.      * @access public
  132.      * @param int $statusCode 
  133.      * @param string $reasonPhrase 
  134.      * @return void 
  135.      */
  136.     public function setStatus($statusCode$reasonPhrase null{
  137.         if (!isset($reasonPhrase)) {
  138.             $reasonPhrase (isset($this->reasonPhrases[$statusCode]$this->reasonPhrases[$statusCode'');
  139.         }
  140.         $this->statusLine = "HTTP/1.1 $statusCode $reasonPhrase";
  141.     }
  142.  
  143.     /**
  144.      * Устанавливает поле заголовка ответа.
  145.      *
  146.      * @access public
  147.      * @param string $name 
  148.      * @param string $value 
  149.      * @param boolean $replace 
  150.      * @return void 
  151.      */
  152.     public function setHeader($name$value$replace true{
  153.         if ((!$replace&& isset($this->headers[$name])) {
  154.             return;
  155.         }
  156.         $this->headers[$name$value;
  157.     }
  158.  
  159.     /**
  160.      * Устанавливает cookie.
  161.      *
  162.      * @access public
  163.      * @param string $name 
  164.      * @param string $value 
  165.      * @param int $expire 
  166.      * @param string $path 
  167.      * @param string $domain 
  168.      * @param boolean $secure 
  169.      * @return void 
  170.      */
  171.     public function setCookie($name$value ''$expire ''$path ''$domain ''$secure false{
  172.         $this->cookies[$namecompact('value''expire''path''domain''secure');
  173.     }
  174.  
  175.     /**
  176.      * Удаляет cookie.
  177.      *
  178.      * @access public
  179.      * @param string $name 
  180.      * @param string $path 
  181.      * @param string $domain 
  182.      * @param boolean $secure 
  183.      * @return void 
  184.      */
  185.     public function deleteCookie($name$path ''$domain ''$secure false{
  186.         $this->setCookie($name''(time(1)$path$domain$secure);
  187.     }
  188.  
  189.     /**
  190.      * Устанавливает адрес для переадресации.
  191.      *
  192.      * @param string $location 
  193.      * @return void 
  194.      * @access public
  195.      */
  196.     public function setRedirect($location{
  197.         $this->setHeader('Location'$location);
  198.         $this->commit();
  199.     }
  200.  
  201.     public function redirectToCurrentSection($action ''{
  202.         $request Request::getInstance();
  203.         $this->setRedirect(
  204.             $request->getBasePath()
  205.             .$request->getLangSegment()
  206.             .$request->getPath(Request::PATH_TEMPLATEtrue)
  207.             .$action
  208.         );
  209.     }
  210.  
  211.     /**
  212.      * Добавляет данные к телу ответа.
  213.      *
  214.      * @access public
  215.      * @param string $data 
  216.      * @return void 
  217.      */
  218.     public function write($data{
  219.         $this->body .= $data;
  220.     }
  221.  
  222.     /**
  223.      * Отправляет ответ клиенту и завершает работу программы.
  224.      *
  225.      * @access public
  226.      * @return void 
  227.      */
  228.     public function commit({
  229.         if (!headers_sent()) {
  230.             header($this->statusLine);
  231.             foreach ($this->headers as $name => $value{
  232.                 header("$name$value");
  233.             }
  234.             foreach ($this->cookies as $name => $params{
  235.                 setcookie($name$params['value']$params['expire']$params['path']$params['domain']$params['secure']);
  236.             }
  237.         }
  238.         echo $this->body;
  239.         exit;
  240.     }
  241. }

Documentation generated on Mon, 17 Sep 2007 13:31:20 +0300 by phpDocumentor 1.4.0a2