| <?php |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| 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 = [ |
| 'xml' => 'application/xml', |
| 'json' => 'application/json', |
| 'html' => 'text/html', |
| ]; |
|
|
| |
| |
| |
| |
| 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; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function _empty($method) |
| { |
| if (method_exists($this, $method . '_' . $this->method . '_' . $this->type)) { |
| |
| $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); |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| protected function response($data, $type = 'json', $code = 200) |
| { |
| return Response::create($data, $type)->code($code); |
| } |
|
|
| } |
|
|