|
|
<?php
|
|
|
declare (strict_types = 1);
|
|
|
|
|
|
namespace app\adminapi;
|
|
|
|
|
|
use think\App;
|
|
|
use think\Response;
|
|
|
|
|
|
// use think\exception\ValidateException;
|
|
|
// use think\Validate;
|
|
|
|
|
|
/**
|
|
|
* 控制器基礎類
|
|
|
*/
|
|
|
abstract class ApiController
|
|
|
{
|
|
|
/**
|
|
|
* Request實例
|
|
|
* @var \think\Request
|
|
|
*/
|
|
|
protected $request;
|
|
|
|
|
|
/**
|
|
|
* 應用實例
|
|
|
* @var \think\App
|
|
|
*/
|
|
|
protected $app;
|
|
|
|
|
|
/**
|
|
|
* 是否批量驗證
|
|
|
* @var bool
|
|
|
*/
|
|
|
protected $batchValidate = false;
|
|
|
|
|
|
/**
|
|
|
* 控制器中間件
|
|
|
* @var array
|
|
|
*/
|
|
|
protected $middleware = [];
|
|
|
|
|
|
/**
|
|
|
* 構造方法
|
|
|
* @access public
|
|
|
* @param App $app 應用對象
|
|
|
*/
|
|
|
public function __construct(App $app)
|
|
|
{
|
|
|
$this->app = $app;
|
|
|
$this->request = $this->app->request;
|
|
|
|
|
|
// 控制器初始化
|
|
|
$this->initialize();
|
|
|
}
|
|
|
|
|
|
// 初始化
|
|
|
protected function initialize()
|
|
|
{
|
|
|
|
|
|
// header('Access-Control-Allow-Origin: *');
|
|
|
|
|
|
// //允許的請求頭信息
|
|
|
// header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");
|
|
|
|
|
|
// //允許的請求類型
|
|
|
// header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, PATCH');
|
|
|
|
|
|
// //允許攜帶證書式訪問(攜帶cookie)
|
|
|
// header('Access-Control-Allow-Credentials:true');
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 驗證數據
|
|
|
* @access protected
|
|
|
* @param array $data 數據
|
|
|
* @param string|array $validate 驗證器名或者驗證規則數組
|
|
|
* @param array $message 提示信息
|
|
|
* @param bool $batch 是否批量驗證
|
|
|
* @return array|string|true
|
|
|
* @throws ValidateException
|
|
|
*/
|
|
|
protected function validate(array $data, $validate, array $message = [], bool $batch = false)
|
|
|
{
|
|
|
if (is_array($validate)) {
|
|
|
$v = new Validate();
|
|
|
$v->rule($validate);
|
|
|
} else {
|
|
|
if (strpos($validate, '.')) {
|
|
|
// 支持場景
|
|
|
[$validate, $scene] = explode('.', $validate);
|
|
|
}
|
|
|
$class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate);
|
|
|
$v = new $class();
|
|
|
if (!empty($scene)) {
|
|
|
$v->scene($scene);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$v->message($message);
|
|
|
|
|
|
// 是否批量驗證
|
|
|
if ($batch || $this->batchValidate) {
|
|
|
$v->batch(true);
|
|
|
}
|
|
|
|
|
|
return $v->failException(true)->check($data);
|
|
|
}
|
|
|
|
|
|
public function Success($data,$message='請求成功',$code=200,$type='json',$header=[]){
|
|
|
$result = [
|
|
|
'code' => $code,
|
|
|
'message' => $message,
|
|
|
'time'=>time(),
|
|
|
'data'=>$data
|
|
|
];
|
|
|
return Response::create($result,$type)->header($header);
|
|
|
}
|
|
|
|
|
|
public function Error($data,$message='請求失敗',$code=500,$type='json',$header=[]){
|
|
|
$result = [
|
|
|
'code' => $code,
|
|
|
'message' => $message,
|
|
|
'time'=>time(),
|
|
|
'data'=>$data
|
|
|
];
|
|
|
return Response::create($result,$type)->header($header);
|
|
|
}
|
|
|
}
|