跨域情况下,客户端先发送options预检请求,接口服务端需要对预检请求进行处理。
在入口文件 public/index.php中,增加代码如下:
//处理跨域预检请求
if($_SERVER['REQUEST_METHOD'] == 'OPTIONS'){
//允许的源域名
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');
exit;
}
所有后台接口,都需要进行跨域处理。
创建接口基础控制器类:项目目录下,执行以下命令
php think make:controller adminapi/BaseApi --plain
控制器文件 application/adminapi/controller/BaseApi.php中
创建初始化方法 _initialize()
//初始化方法
public function _initialize()
{
parent::_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');
}
接口响应数据格式,统一约定为 包含code 、msg、data 三个字段的 json字符串。
在BaseApi控制器中,定义快速响应数据的方法如下:
/**
* 通用响应
* @param int $code 错误码
* @param string $msg 错误描述
* @param array $data 返回数据
*/
public function response($code=200, $msg='success', $data=[])
{
$res = [
'code' => $code,
'msg' => $msg,
'data' => $data
];
json($res)->send();die;
}
|