运行环境要求 PHP7.1+
thinkphp6-api 可用于后台单应用及多应用的 API 接口开发,它基于 thinkphp6 实现。它使用了最新的后台技术栈,相信不管你的需求是什么,本项目都能帮助到你。
├── app 应用目录
│ ├── api api应用
│ ├── ├── route URL和路由配置
│ ├── ├── controller 控制层
│ ├── ├── logic 业务逻辑层
│ ├── ├── model 模型层
│ ├── ├── view 视图层
│ ├── common 通用处理目录
│ ├── ├── event 事件
│ ├── ├── exception 异常处理
│ ├── ├── facade 依赖注入
│ ├── ├── middleware 中间件
│ ├── ├── third 第三方API封装
│ ├── ├── traits trait
│ ├── ├── validate 校验
├── config 配置目录
│ ├── extra 自定义配置
│ ├── └── define.php 宏定义
│ ├── └── EC.php 错误码
│ ├── └── rule_zh.php 接口中文翻译
├── db 数据库目录
├── extend 扩展类库目录
│ ├── arrays 数组处理目录
│ │ └── ArrayList.php
│ │ └── Stack.php
│ ├── command 命令行处理目录
│ │ └── ExifToolBatch.php
│ │ └── FFmpegTool.php
│ ├── image 图像处理目录
│ │ └── Imagick2.php
│ ├── office offcie操作目录
│ │ └── ExcelWrite.php
│ ├── string 字符串操作目录
│ │ └── P4String.php
│ │ └── Prefix.php
│ │ └── Unicode.php
│ │ └── UUID.php
│ └── PhpCryt.php 加密解密
│ └── QRcode.php 生成二维码
│ └── Webscan.php 入口参数安全检测
│ └── ZipArchiveImproved.php Zip压缩
├── runtime 应用的运行时目录
├── uploads 上传文件目录
├── vendor Composer类库目录
└── .env 环境变量
└── index.php 入口文件
└── .htaccess 用于apache的重写
严格按照 ThinkPHP 6.0 的编码规范,但有以下不同:
- 类 class 中的数据成员变量采用
_
前缀的小驼峰法,如$_userName;
- 类 class 中的函数成员变量采用大驼峰法,如
public function GetUser()
- 添加、删除、修改、上传、保存、是否存在、信息、列表 对应的函数名称前缀为
Add
、Del
、Modify
、Upload
、Save
、Exist
、Info
、GetList
- API 提供的接口,采用大驼峰法 + _ 进行分割
Add
、Del
、Modify
、Upload
、Save
、Exist
、Info
、Get_List
TP自身的数据成员变量,沿用其本身的规范
- 使用
\EC
组织错误码和错误信息 - api 地址不正确,会给出友好的提示
- 为了避免使用
use app\api\model\User as UserM;
, 开启了控制器的后缀名(Controller) - 在控制器层和业务逻辑层分别有获取当前登录用户信息以及身份的方法,不需要额外查表
控制器,self::$_uid、self::$_token
模型,$this->GetUserName()
业务的错误使用返回值直接返回,无法处理的请求采用抛异常 — E() 函数,无需显示异常trace详情的抛出异常需要传入false参数 这样的设计保证了调用者无论如何都有足够的控制权,从而让整个系统是健壮的。
服务层是 API 调用的入口,统一处理 API 应用接入授权、产品注册授权检测、API 权限控制等
- 使用 Base 控制器的
I()
方法接收并验证请求参数 - 调用业务逻辑层, 使用 Base 控制器的
return $this->R()
方法返回数据 - 一个函数就是一个独立的 API 接口
- 服务层之间不可相互调用
- 调用模型层,完成业务的逻辑处理
- 一个函数完成一个独立的业务逻辑处理
- 内部相关权限的授权检测
- 不直接参与数据库的操作
- 独立的业务逻辑层之间不可相互调用
- 通过全局的
$_error_code
、$_error_msg
返回错误信息
- 调用数据库,完成数据的读写操作
- 单条信息有查询缓存,并且在更新、删除操作时同步缓存信息
- 不进行权限的授权检测(统一由业务逻辑层处理)
- 数据库操作的事务处理交由业务逻辑层处理
- 无法通过返回值处理的可直接抛出异常(尽量避免),不可捕获异常
- 独立的模型层之间不可相互调用
新增数据的最佳实践原则:使用
create
方法新增数据,使用saveAll
批量新增数据
更新的最佳实践原则是:如果需要使用模型事件,那么就先查询后更新,如果不需要使用事件或者不查询直接更新,直接使用静态的
Update
方法进行条件更新。静态Update
方法只适合单条更新 如非必要,尽量不要使用批量更新(或者使用->where()->update()
方式)。
所有涉及 Vendor 源码库的修改,需要增加 //Todo: Hacfin
标识注释
修改了 vendor/captioning/captioning/src/Captioning/Cue.php
//Todo: Hacfin
//"\r\t\n\0\x0B"
$this->textLines = array_map('trim', preg_split('/$\R?^/m', $_text), ["\r\t\n\0\x0B"]);
修改了 vendor/php-ffmpeg/php-ffmpeg/src/FFMpeg/Media/Frame.php
//Todo: Hacfin
//修改 -ss 时间戳,生成缩略图失败的bug
$timeCode = (string) $this->timecode;
if('00:00:00.00' == $timeCode)
{
$keys = array_merge(array_keys($commands, $timeCode, true), array_keys($commands, '-ss', true));
foreach ($keys as $key)
{
unset($commands[$key]);
}
}
修改了 vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php
//新增joins方法
public function joins(array $joins)
{
// 如果为组数,则循环调用join
foreach ($joins as $key => $value) {
if (is_array($value) && 2 <= count($value)) {
$this->join($value[0], $value[1], isset($value[2]) ? $value[2] : 'INNER');
}
}
return $this;
}
修改了 vendor/topthink/think-orm/src/db/PDOConnection.php
//Todo: Hacfin
//修复在高并发下,返回值为null的bug
$result = $this->cache->get($key);
if (false !== $result) {
return $result;
}
###3.4 dingtalk 修改了 vendor/mingyoung/dingtalk/src/Auth/OAuthClient.php
//Todo: Hacfin
//新增$state传入参数
'state' => $state ? $state : $this->makeState(),
//Todo: Hacfin
//屏蔽校验代码
/*if (!$this->hasValidState($this->app['request']->get('state'))) {
throw new InvalidStateException();
}*/
修改了 vendor/topthink/framework/src/think/middleware/SessionInit.php
//Todo: Hacfin
//修复 session 数据保存时,无法动态修改过期时间的问题
$this->app->cookie->set($cookieName, $this->session->getId(), $this->app->config->get('cookie.expire'));
- 采用
PHP7
强类型(严格模式) - 支持更多的
PSR
规范 - 多应用支持
ORM
组件独立- 改进的中间件机制
- 更强大和易用的查询
- 全新的事件系统
- 支持容器
invoke
回调 - 模板引擎组件独立
- 内部功能中间件化
SESSION
机制改进- 缓存及日志支持多通道
- 引入
Filesystem
组件 - 对
Swoole
以及协程支持改进 - 对
IDE
更加友好 - 统一和精简大量用法
copyright © 2020 北京华科飞扬科技股份公司