Source of file Request.php
Size: 5,911 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/Json/Server/Request.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Json\Server; use Zend\Json; /** * @todo Revised method regex to allow NS; however, should SMD be revised to strip PHP NS instead when attaching functions? */ class Request { /** * Request ID * @var mixed */ protected $id; /** * Flag * @var bool */ protected $isMethodError = false; /** * Flag * @var bool */ protected $isParseError = false; /** * Requested method * @var string */ protected $method; /** * Regex for method * @var string */ protected $methodRegex = '/^[a-z][a-z0-9\\\\_.]*$/i'; /** * Request parameters * @var array */ protected $params = array(); /** * JSON-RPC version of request * @var string */ protected $version = '1.0'; /** * Set request state * * @param array $options * @return \Zend\Json\Server\Request */ public function setOptions(array $options) { $methods = get_class_methods($this); foreach ($options as $key => $value) { $method = 'set' . ucfirst($key); if (in_array($method, $methods)) { $this->$method($value); } elseif ($key == 'jsonrpc') { $this->setVersion($value); } } return $this; } /** * Add a parameter to the request * * @param mixed $value * @param string $key * @return \Zend\Json\Server\Request */ public function addParam($value, $key = null) { if ((null === $key) || !is_string($key)) { $index = count($this->params); $this->params[$index] = $value; } else { $this->params[$key] = $value; } return $this; } /** * Add many params * * @param array $params * @return \Zend\Json\Server\Request */ public function addParams(array $params) { foreach ($params as $key => $value) { $this->addParam($value, $key); } return $this; } /** * Overwrite params * * @param array $params * @return \Zend\Json\Server\Request */ public function setParams(array $params) { $this->params = array(); return $this->addParams($params); } /** * Retrieve param by index or key * * @param int|string $index * @return mixed|null Null when not found */ public function getParam($index) { if (array_key_exists($index, $this->params)) { return $this->params[$index]; } return null; } /** * Retrieve parameters * * @return array */ public function getParams() { return $this->params; } /** * Set request method * * @param string $name * @return \Zend\Json\Server\Request */ public function setMethod($name) { if (!preg_match($this->methodRegex, $name)) { $this->isMethodError = true; } else { $this->method = $name; } return $this; } /** * Get request method name * * @return string */ public function getMethod() { return $this->method; } /** * Was a bad method provided? * * @return bool */ public function isMethodError() { return $this->isMethodError; } /** * Was a malformed JSON provided? * * @return bool */ public function isParseError() { return $this->isParseError; } /** * Set request identifier * * @param mixed $name * @return \Zend\Json\Server\Request */ public function setId($name) { $this->id = (string) $name; return $this; } /** * Retrieve request identifier * * @return mixed */ public function getId() { return $this->id; } /** * Set JSON-RPC version * * @param string $version * @return \Zend\Json\Server\Request */ public function setVersion($version) { if ('2.0' == $version) { $this->version = '2.0'; } else { $this->version = '1.0'; } return $this; } /** * Retrieve JSON-RPC version * * @return string */ public function getVersion() { return $this->version; } /** * Set request state based on JSON * * @param string $json * @return void */ public function loadJson($json) { try { $options = Json\Json::decode($json, Json\Json::TYPE_ARRAY); $this->setOptions($options); } catch(\Exception $e) { $this->isParseError = true; } } /** * Cast request to JSON * * @return string */ public function toJson() { $jsonArray = array( 'method' => $this->getMethod() ); if (null !== ($id = $this->getId())) { $jsonArray['id'] = $id; } $params = $this->getParams(); if (!empty($params)) { $jsonArray['params'] = $params; } if ('2.0' == $this->getVersion()) { $jsonArray['jsonrpc'] = '2.0'; } return Json\Json::encode($jsonArray); } /** * Cast request to string (JSON) * * @return string */ public function __toString() { return $this->toJson(); } } |