wonder-game / center-utility
utility for easyswoole
v3.3.2
2023-06-04 03:25 UTC
Requires
- php: >=7.4
- easyswoole/config: >=1.0
- easyswoole/easyswoole: 3.4.x
- easyswoole/file-watcher: ^1.0
- easyswoole/i18n: ^1.0
- easyswoole/jwt: >=1.1
- easyswoole/log: >=1.0
- easyswoole/mysqli: >=2.2
- easyswoole/orm: >=1.4
- easyswoole/policy: ^1.0
- easyswoole/redis-pool: >=2.1
- easyswoole/swoole-ide-helper: ^1.3
- easyswoole/task: >=1.1
- easyswoole/tracker: ^1.1
- wonder-game/es-notify: 1.0.*
Requires (Dev)
- easyswoole/phpunit: ^1.1
- dev-master
- 3.3.x-dev
- v3.3.2
- v3.3.1
- v3.3.0
- 3.2.x-dev
- 3.2.4
- 3.2.3
- 3.2.2
- 3.2.1
- 3.1.5
- 3.1.4
- 3.1.3
- 3.1.2
- v3.1.1
- 2.6.2
- 2.6.1
- 2.6.0
- 2.5.19
- v2.5.18
- v2.5.17
- v2.5.16
- v2.5.15
- v2.5.14
- v2.5.13
- v2.5.12
- v2.5.11
- v2.5.10
- v2.5.9
- v2.5.8
- v2.5.7
- v2.5.6
- v2.5.5
- v2.5.4
- v2.5.3
- v2.5.2
- v2.5.1
- v2.5.0
- v2.3.6
- v2.3.5
- v2.3.4
- v2.3.3
- v2.3.2
- v2.3.1
- v2.3.0
- v2.2.27
- v2.2.26
- v2.2.25
- v2.2.24
- v2.2.23
- v2.2.22
- v2.2.21
- v2.2.20
- v2.2.19
- v2.2.18
- v2.2.17
- v2.2.16
- v2.2.15
- v2.2.14
- v2.2.13
- v2.2.12
- v2.2.11
- v2.2.10
- v2.2.9
- v2.2.8
- v2.2.7
- v2.2.6
- v2.2.5
- v2.2.4
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.17
- v2.1.16
- v2.1.15
- v2.1.14
- v2.1.13
- v2.1.12
- v2.1.11
- v2.1.10
- v2.1.9
- v2.1.8
- v2.1.7
- v2.1.6
- v2.1.5
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.22
- v2.0.21
- v2.0.20
- v2.0.19
- v2.0.18
- v2.0.17
- v2.0.16
- v2.0.15
- v2.0.14
- v2.0.13
- v2.0.12
- v2.0.11
- v2.0.10
- v2.0.9
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.0.39
- v1.0.38
- v1.0.37
- v1.0.36
- v1.0.35
- v1.0.34
- v1.0.33
- v1.0.32
- v1.0.31
- v1.0.30
- v1.0.29
- v1.0.28
- v1.0.27
- v1.0.26
- v1.0.25
- v1.0.24
- v1.0.23
- v1.0.22
- v1.0.21
- v1.0.20
- v1.0.19
- v1.0.18
- v1.0.17
- v1.0.16
- v1.0.15
- v1.0.14
- v1.0.13
- v1.0.12
- v1.0.11
- v1.0.10
- v1.0.9
- v1.0.8
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v1.0.0-beta.1
This package is auto-updated.
Last update: 2025-03-04 07:14:05 UTC
README
简介
基于Easyswoole封装的一些Trait和Class,放到Composer仓库以实现多项目共用一套代码
开始
composer require wonder-game/es-utility
需要掌握的基础知识:
目录结构及常用介绍
src 理解为EasySwoole的App目录
├── Common 主要放一些非EasySwoole的东
| ├── Classes 自定义类
│ │ ├── Crontab 实现定时任务的类(后面会移动至Crontab目录)
│ │ ├── CtxRequest 协程单例类,解决一些痛点,如Model内无法获取Http Request、WebSocket Caller实例等,作用与EasySwoole\Component\Context\ContextManager类似
│ │ ├── DateUtils 时间日期时区等处理
│ │ ├── ExceptionTrigger 自定义异常处理器,将异常上报至redis或http
│ │ ├── FdManager WebSocket连接符管理,共享内存(Swoole\Table)实现
│ │ ├── LamJwt jwt
│ │ ├── LamLog 自定义日志处理器
│ │ ├── LamOpenssl RSA数据加密和解密
│ │ ├── LamUnit 辅助工具类
│ │ ├── Mysqli 对MysqlClient的二次封装
│ │ ├── ShardTable 定时建分区、续分区
│ │ ├── Tree 数行结构处理
│ │ └── XlsWriter 数据导入和导出
│ ├── Exception 各种自定义异常
│ ├── Http Http相关的配置
│ │ └── Code Http响应状态码,项目的Code请`继承`它
│ ├── Language I18N国际化目录
│ │ ├── Dictionary 国际化字典,项目请`继承`它
│ │ └── Languages I18n助手类,主要用来注册、设置
│ │
│ └── OrmCache 模型缓存组件,已实现 String、Hash、Set、SplArray
│
├── HttpController
│ ├── Admin
│ │ ├── BaseTrait 继承BaseController
│ │ ├── AuthTrait 继承BaseTrait引用类,是其他控制器的父类,主要实现一些CURD等基础操作,子类可写最少代码实现相关功能
│ │ └── ... 其他业务控制器
│ ├── Api
│ └── BaseController 所有控制器的基类
├── HttpTracker 链路追踪
│ ├── Index 继承自PointContext,目的是为了默认开启autoSave及设置saveHandler,实例化时用它替代PointContext
│ └── SaveHandler 实现SaveHandlerInterface接口
├── Model
│ ├── BaseModelTrait 所有Model的基类
│ └── ... 其他业务模型
├── Task 异步任务
│ ├── Crontab 通用的异步任务模板
│ └── ... 异步任务类
├── WebSocket 同 HttpController
├── ... 其他业务
├── EventInitialize 对EasySwooleEvent::initialize事件的一些封装
├── EventMainServerCreate 对EasySwooleEvent::mainServerCreate事件的一些封装
└── function.php 常用函数,项目可预定义对应函数以实现不同逻辑
Controller
<?php use WonderGame\CenterUtility\HttpController\Admin\AdminTrait; class MyAdminController { use AdminTrait; // here are some methods from AdminTrait .... }
Model
<?php use WonderGame\CenterUtility\Model\AdminModelTrait; class MyAdminModel { use AdminModelTrait; // here are some methods from AdminModelTrait .... }
答疑解惑
function.php 为何不写在此项目的composer.json
function.php应该由项目的composer.json去定义引入的顺序
位置一定得是在项目的函数引入之后,否则无法预定义函数,而放在此项目的composer.json会被优先加载
为何多数文件选择trait而不使用继承
trait和继承各有优劣,选择trait目的是为了EasySwoole推荐的继承关系不被破坏
trait有哪些坑
1. 不允许重写属性,所以基本都定义了一个setTraitProtected方法去修改trait属性
2. 不允许重载方法,当某些项目可能比方法多一个小逻辑时,需要及时调整代码的封装,否则需要整个复制多一份,日积月累,反而可能更难维护
3. 由于 2 的限制,现将普通控制器方法的public方法名默认添加一个固定前缀,通过基础控制器 /src/HttpController/BaseControllerTrait.php 的 actionNotFound 方法来实现更加灵活的调用方式
TODO
- 创建定时任务Crontab和消费任务Consumer,src/Common/Classes/Crontab移动至src/Crontab目录
- 自定义Log处理器改为onLog + Event方式
- 重写Tree、ShardTable类
- WebSocket相关类,事件、解析、Caller、连接符管理等
- Crontab支持database、file、http等方式获取
- es-orm-cache 组件封装,替换原有的cacheinfo系列方法
- WebSocket实现导出全部,永不超时,进度实时可见,随时取消
- 定义模型Class映射
其他
关于
为何menu需要区分系统
- 同一账号是允许在多个系统中登录的
- 如果不使用系统来约束,那么会返回不存在的路由,前端的路由注册一定会报错
例如
一共有1、2、3、4、5、6 个菜单,用户A在admin系统有123菜单,在other系统有456 如果菜单没有区分系统,则A无论登录什么系统都会返回他拥有的所有菜单,而客户端去注册不存在的路由时,报错!