123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- <?php
- // +----------------------------------------------------------------------
- // | ThinkPHP [ WE CAN DO IT JUST THINK ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- // +----------------------------------------------------------------------
- // | Author: liu21st <liu21st@gmail.com>
- // +----------------------------------------------------------------------
- namespace think\controller;
- use think\App;
- use think\Request;
- use think\Response;
- abstract class Rest
- {
- protected $method; // 当前请求类型
- protected $type; // 当前资源类型
- // 输出类型
- protected $restMethodList = 'get|post|put|delete';
- protected $restDefaultMethod = 'get';
- protected $restTypeList = 'html|xml|json|rss';
- protected $restDefaultType = 'html';
- protected $restOutputType = [ // REST允许输出的资源类型列表
- 'xml' => 'application/xml',
- 'json' => 'application/json',
- 'html' => 'text/html',
- ];
- /**
- * 构造函数 取得模板对象实例
- * @access public
- */
- public function __construct()
- {
- // 资源类型检测
- $request = Request::instance();
- $ext = $request->ext();
- if ('' == $ext) {
- // 自动检测资源类型
- $this->type = $request->type();
- } elseif (!preg_match('/(' . $this->restTypeList . ')$/i', $ext)) {
- // 资源类型非法 则用默认资源类型访问
- $this->type = $this->restDefaultType;
- } else {
- $this->type = $ext;
- }
- // 请求方式检测
- $method = strtolower($request->method());
- if (!preg_match('/(' . $this->restMethodList . ')$/i', $method)) {
- // 请求方式非法 则用默认请求方法
- $method = $this->restDefaultMethod;
- }
- $this->method = $method;
- }
- /**
- * REST 调用
- * @access public
- * @param string $method 方法名
- * @return mixed
- * @throws \Exception
- */
- public function _empty($method)
- {
- if (method_exists($this, $method . '_' . $this->method . '_' . $this->type)) {
- // RESTFul方法支持
- $fun = $method . '_' . $this->method . '_' . $this->type;
- } elseif ($this->method == $this->restDefaultMethod && method_exists($this, $method . '_' . $this->type)) {
- $fun = $method . '_' . $this->type;
- } elseif ($this->type == $this->restDefaultType && method_exists($this, $method . '_' . $this->method)) {
- $fun = $method . '_' . $this->method;
- }
- if (isset($fun)) {
- return App::invokeMethod([$this, $fun]);
- } else {
- // 抛出异常
- throw new \Exception('error action :' . $method);
- }
- }
- /**
- * 输出返回数据
- * @access protected
- * @param mixed $data 要返回的数据
- * @param String $type 返回类型 JSON XML
- * @param integer $code HTTP状态码
- * @return Response
- */
- protected function response($data, $type = 'json', $code = 200)
- {
- return Response::create($data, $type)->code($code);
- }
- }
|