thinkphp6 api framework and integrated a lot of third-party sdk features
运行环境要求 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 的编码规范,但有以下不同:
_
前缀的小驼峰法,如 $_userName;
public function GetUser()
Add
、Del
、Modify
、Upload
、Save
、Exist
、Info
、GetList
Add
、Del
、Modify
、Upload
、Save
、Exist
、Info
、Get_List
TP自身的数据成员变量,沿用其本身的规范
\EC
组织错误码和错误信息use app\api\model\User as UserM;
, 开启了控制器的后缀名(Controller) 控制器,self::$_uid、self::$_token
模型,$this->GetUserName()
业务的错误使用返回值直接返回,无法处理的请求采用抛异常 — E() 函数,无需显示异常trace详情的抛出异常需要传入false参数
这样的设计保证了调用者无论如何都有足够的控制权,从而让整个系统是健壮的。
服务层是 API 调用的入口,统一处理 API 应用接入授权、产品注册授权检测、API 权限控制等
I()
方法接收并验证请求参数return $this->R()
方法返回数据$_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 北京华科飞扬科技股份公司