<?php
|
/**
|
* PhalApi_Response 响应类
|
*
|
* - 拥有各种结果返回状态 ,以及对返回结果 的格式化
|
* - 其中:200成功,400非法请求,500服务器错误
|
*
|
* @package PhalApi\Response
|
* @license http://www.phalapi.net/license GPL 协议
|
* @link http://www.phalapi.net/
|
* @author dogstar <chanzonghuang@gmail.com> 2014-10-02
|
*/
|
|
abstract class PhalApi_Response {
|
|
/**
|
* @var int $ret 返回状态码,其中:200成功,400非法请求,500服务器错误
|
*/
|
protected $ret = 200;
|
|
/**
|
* @var array 待返回给客户端的数据
|
*/
|
protected $data = array();
|
|
/**
|
* @var string $msg 错误返回信息
|
*/
|
protected $msg = '';
|
|
/**
|
* @var array $headers 响应报文头部
|
*/
|
protected $headers = array();
|
|
/**
|
* @var array $debug 调试信息
|
*/
|
protected $debug = array();
|
|
/** ------------------ setter ------------------ **/
|
|
/**
|
* 设置返回状态码
|
* @param int $ret 返回状态码,其中:200成功,400非法请求,500服务器错误
|
* @return PhalApi_Response
|
*/
|
public function setRet($ret) {
|
$this->ret = $ret;
|
return $this;
|
}
|
|
/**
|
* 设置返回数据
|
* @param array/string $data 待返回给客户端的数据,建议使用数组,方便扩展升级
|
* @return PhalApi_Response
|
*/
|
public function setData($data) {
|
$this->data = $data;
|
return $this;
|
}
|
|
/**
|
* 设置错误信息
|
* @param string $msg 错误信息
|
* @return PhalApi_Response
|
*/
|
public function setMsg($msg) {
|
$this->msg = $msg;
|
return $this;
|
}
|
|
/**
|
* 设置调试信息
|
* @param string $key 键值标识
|
* @param mixed $value 调试数据
|
* @return PhalApi_Response
|
*/
|
public function setDebug($key, $value) {
|
if (DI()->debug) {
|
$this->debug[$key] = $value;
|
}
|
return $this;
|
}
|
|
/**
|
* 添加报文头部
|
* @param string $key 名称
|
* @param string $content 内容
|
*/
|
public function addHeaders($key, $content) {
|
$this->headers[$key] = $content;
|
}
|
|
/** ------------------ 结果输出 ------------------ **/
|
|
/**
|
* 结果输出
|
*/
|
public function output() {
|
$this->handleHeaders($this->headers);
|
|
$rs = $this->getResult();
|
|
echo $this->formatResult($rs);
|
}
|
|
/** ------------------ getter ------------------ **/
|
|
/**
|
* 根据状态码调整Http响应状态码
|
*/
|
public function adjustHttpStatus() {
|
$httpStatus = array (
|
100 => 'HTTP/1.1 100 Continue',
|
101 => 'HTTP/1.1 101 Switching Protocols',
|
200 => 'HTTP/1.1 200 OK',
|
201 => 'HTTP/1.1 201 Created',
|
202 => 'HTTP/1.1 202 Accepted',
|
203 => 'HTTP/1.1 203 Non-Authoritative Information',
|
204 => 'HTTP/1.1 204 No Content',
|
205 => 'HTTP/1.1 205 Reset Content',
|
206 => 'HTTP/1.1 206 Partial Content',
|
300 => 'HTTP/1.1 300 Multiple Choices',
|
301 => 'HTTP/1.1 301 Moved Permanently',
|
302 => 'HTTP/1.1 302 Found',
|
303 => 'HTTP/1.1 303 See Other',
|
304 => 'HTTP/1.1 304 Not Modified',
|
305 => 'HTTP/1.1 305 Use Proxy',
|
307 => 'HTTP/1.1 307 Temporary Redirect',
|
400 => 'HTTP/1.1 400 Bad Request',
|
401 => 'HTTP/1.1 401 Unauthorized',
|
402 => 'HTTP/1.1 402 Payment Required',
|
403 => 'HTTP/1.1 403 Forbidden',
|
404 => 'HTTP/1.1 404 Not Found',
|
405 => 'HTTP/1.1 405 Method Not Allowed',
|
406 => 'HTTP/1.1 406 Not Acceptable',
|
407 => 'HTTP/1.1 407 Proxy Authentication Required',
|
408 => 'HTTP/1.1 408 Request Time-out',
|
409 => 'HTTP/1.1 409 Conflict',
|
410 => 'HTTP/1.1 410 Gone',
|
411 => 'HTTP/1.1 411 Length Required',
|
412 => 'HTTP/1.1 412 Precondition Failed',
|
413 => 'HTTP/1.1 413 Request Entity Too Large',
|
414 => 'HTTP/1.1 414 Request-URI Too Large',
|
415 => 'HTTP/1.1 415 Unsupported Media Type',
|
416 => 'HTTP/1.1 416 Requested range not satisfiable',
|
417 => 'HTTP/1.1 417 Expectation Failed',
|
500 => 'HTTP/1.1 500 Internal Server Error',
|
501 => 'HTTP/1.1 501 Not Implemented',
|
502 => 'HTTP/1.1 502 Bad Gateway',
|
503 => 'HTTP/1.1 503 Service Unavailable',
|
504 => 'HTTP/1.1 504 Gateway Time-out',
|
505 => 'HTTP/1.1 505 HTTP Version not supported',
|
);
|
|
$str = isset($httpStatus[$this->ret]) ? $httpStatus[$this->ret] : "HTTP/1.1 {$this->ret} PhalApi Unknown Status";
|
@header($str);
|
|
return $this;
|
}
|
|
public function getResult() {
|
$rs = array(
|
'ret' => $this->ret,
|
'data' => $this->data,
|
'msg' => $this->msg,
|
);
|
|
if (!empty($this->debug)) {
|
$rs['debug'] = $this->debug;
|
}
|
|
return $rs;
|
}
|
|
/**
|
* 获取头部
|
*
|
* @param string $key 头部的名称
|
* @return string/array 对应的内容,不存在时返回NULL,$key为NULL时返回全部
|
*/
|
public function getHeaders($key = NULL) {
|
if ($key === NULL) {
|
return $this->headers;
|
}
|
|
return isset($this->headers[$key]) ? $this->headers[$key] : NULL;
|
}
|
|
/** ------------------ 内部方法 ------------------ **/
|
|
protected function handleHeaders($headers) {
|
foreach ($headers as $key => $content) {
|
@header($key . ': ' . $content);
|
}
|
}
|
|
/**
|
* 格式化需要输出返回的结果
|
*
|
* @param array $result 待返回的结果数据
|
*
|
* @see PhalApi_Response::getResult()
|
*/
|
abstract protected function formatResult($result);
|
}
|