mirror of
https://gitee.com/zoujingli/ThinkAdmin.git
synced 2025-04-05 19:41:44 +08:00
129 lines
4.1 KiB
PHP
129 lines
4.1 KiB
PHP
<?php
|
||
|
||
// +----------------------------------------------------------------------
|
||
// | ThinkAdmin
|
||
// +----------------------------------------------------------------------
|
||
// | 版权所有 2014~2017 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
|
||
// +----------------------------------------------------------------------
|
||
// | 官方网站: http://think.ctolog.com
|
||
// +----------------------------------------------------------------------
|
||
// | 开源协议 ( https://mit-license.org )
|
||
// +----------------------------------------------------------------------
|
||
// | github开源项目:https://github.com/zoujingli/ThinkAdmin
|
||
// +----------------------------------------------------------------------
|
||
|
||
namespace controller;
|
||
|
||
use service\ToolsService;
|
||
use think\Cache;
|
||
use think\Request;
|
||
use think\Response;
|
||
|
||
/**
|
||
* 数据接口通用控制器
|
||
* Class BasicApi
|
||
* @package controller
|
||
*/
|
||
class BasicApi
|
||
{
|
||
|
||
/**
|
||
* 访问请求对象
|
||
* @var Request
|
||
*/
|
||
public $request;
|
||
|
||
/**
|
||
* 当前访问身份
|
||
* @var string
|
||
*/
|
||
public $token;
|
||
|
||
/**
|
||
* 基础接口SDK
|
||
* @param Request|null $request
|
||
*/
|
||
public function __construct(Request $request = null)
|
||
{
|
||
// CORS 跨域 Options 检测响应
|
||
ToolsService::corsOptionsHandler();
|
||
// 获取当前 Request 对象
|
||
$this->request = is_null($request) ? Request::instance() : $request;
|
||
// 安全方法请求过滤
|
||
if (in_array(strtolower($this->request->action()), ['response', 'setcache', 'getcache', 'delcache', '_empty'])) {
|
||
exit($this->response('禁止访问接口安全方法!', 'ACCESS_NOT_ALLOWED')->send());
|
||
}
|
||
// 访问 Token 检测处理
|
||
$this->token = $this->request->param('token', $this->request->header('token', false));
|
||
if (empty($this->token) && !method_exists($this, $this->request->action())) {
|
||
exit($this->response('访问TOKEN失效,请重新授权!', 'ACCESS_TOKEN_FAILD')->send());
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 输出返回数据
|
||
* @param string $msg 提示消息内容
|
||
* @param string $code 业务状态码
|
||
* @param mixed $data 要返回的数据
|
||
* @param string $type 返回类型 JSON XML
|
||
* @return Response
|
||
*/
|
||
public function response($msg, $code = 'SUCCESS', $data = [], $type = 'json')
|
||
{
|
||
$result = ['msg' => $msg, 'code' => $code, 'data' => $data, 'token' => $this->token, 'dataType' => strtolower($type)];
|
||
return Response::create($result, $type)->header(ToolsService::corsRequestHander())->code(200);
|
||
}
|
||
|
||
/**
|
||
* 写入缓存
|
||
* @param string $name 缓存标识
|
||
* @param mixed $value 存储数据
|
||
* @param int|null $expire 有效时间 0为永久
|
||
* @return bool
|
||
*/
|
||
public function setCache($name, $value, $expire = null)
|
||
{
|
||
return Cache::set("{$this->token}_{$name}", $value, $expire);
|
||
}
|
||
|
||
/**
|
||
* 读取缓存
|
||
* @param string $name 缓存标识
|
||
* @param mixed $default 默认值
|
||
* @return mixed
|
||
*/
|
||
public function getCache($name, $default = false)
|
||
{
|
||
return Cache::get("{$this->token}_{$name}", $default);
|
||
}
|
||
|
||
/**
|
||
* 删除缓存
|
||
* @param string $name 缓存标识
|
||
* @return bool
|
||
*/
|
||
public function delCache($name)
|
||
{
|
||
return Cache::rm("{$this->token}_{$name}");
|
||
}
|
||
|
||
/**
|
||
* API接口调度
|
||
* @return Response
|
||
*/
|
||
public function _empty()
|
||
{
|
||
list($module, $controller, $action, $method) = explode('/', $this->request->path() . '///');
|
||
if (!empty($module) && !empty($controller) && !empty($action) && !empty($method)) {
|
||
$action = ucfirst($action);
|
||
$Api = config('app_namespace') . "\\{$module}\\{$controller}\\{$action}Api";
|
||
if (method_exists($Api, $method)) {
|
||
return $Api::$method($this);
|
||
}
|
||
return $this->response('访问的接口不存在!', 'API_NOT_FOUND');
|
||
}
|
||
return $this->response('不符合标准的接口!', 'API_ERROR');
|
||
}
|
||
|
||
}
|