Download the PHP package thefair/thefairlib without Composer
On this page you can find all versions of the php package thefair/thefairlib. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package thefairlib
Rpc Service 搭建说明文档
最新文档说明:https://github.com/thefair-net/thefairlib
[TOC]
安装
仅可运行于 Linux 和 Mac 环境下,Windows 下也可以通过 Docker for Windows 来作为运行环境或虚拟机,通常来说 Mac 环境下,推荐本地环境部署
- PHP >= 7.3
- Swoole PHP 扩展 >= 4.5,并关闭了 Short Name
- OpenSSL PHP 扩展
- JSON PHP 扩展
- PDO PHP 扩展 (如需要使用到 MySQL 客户端)
- Redis PHP 扩展 (如需要使用到 Redis 客户端)
- Protobuf PHP 扩展 (如需要使用到 gRPC 服务端或客户端)
composer create-project lmz/xxx-skeleton test_service
复制项目中的 .env.example
为 .env
本地配置文件 .env
安装包 composer up
生产环境composer dump-autoload -o
项目文件结构
配置文件结构
开发必读
不能通过全局变量获取属性参数
在 PHP-FPM
下可以通过全局变量获取到请求的参数,服务器的参数等,在 Hyperf
和 Swoole
内,都 无法 通过 $_GET/$_POST/$_REQUEST/$_SESSION/$_COOKIE/$_SERVER
等$_
开头的变量获取到任何属性参数。
通过容器获取的类都是单例
通过依赖注入容器获取的都是进程内持久化的,是多个协程共享的,所以不能包含任何的请求唯一的数据或协程唯一的数据,这类型的数据都通过协程上下文去处理,具体请仔细阅读 依赖注入 和 协程 章节。
框架生命周期
Hyperf
是运行于 Swoole
之上的,想要理解透彻 Hyperf
的生命周期,那么理解 Swoole
的生命周期也至关重要。
Hyperf
的命令管理默认由 symfony/console
提供支持(如果您希望更换该组件您也可以通过改变 skeleton
的入口文件更换成您希望使用的组件),在执行 php bin/hyperf.php start
后,将由 Hyperf\Server\Command\StartServer
命令类接管,并根据配置文件 config/autoload/server.php
内定义的 Server
逐个启动。
关于依赖注入容器的初始化工作,我们并没有由组件来实现,因为一旦交由组件来实现,这个耦合就会非常的明显,所以在默认的情况下,是由入口文件来加载 config/container.php
来实现的。
禁止注入 model,实现单例方法
可以使用 UserInfoModel::xxxx
方法,或make
,new
请求与协程生命周期
Swoole
在处理每个连接时,会默认创建一个协程去处理,主要体现在 onRequest、onReceive、onConnect
事件,所以可以理解为每个请求都是一个协程,由于创建协程也是个常规操作,所以一个请求协程里面可能会包含很多个协程,同一个进程内协程之间是内存共享的,但调度顺序是非顺序的,且协程间本质上是相互独立的没有父子关系,所以对每个协程的状态处理都需要通过 协程上下文 来管理。
路由
路由必须是三级,/m/c/a
http 服务使用 @AutoController
Rpc 服务使用 @RpcService
如 * @RpcService(name="v2/test", protocol="jsonrpc-tcp-length-check", server="json-rpc")
自动生成 Request 文件
参数过滤
路由 /v2/test/get_test
对应 \App\Controller\V2\Test::getTest
方法
必须新建一个对应的 app/Request/V2/Test/GetTest.php
文件
生成命令:php bin/hyperf.php gen:request V2/Test/GetTest
input
可以获得GET|POST
参数,相当于$_REQUEST
app/Request/V2/Test/GetTest.php 源码
新增验证规则
mobile 国内手机号验证
'phone' => 'required|mobile'
str或s 对字符串进行编码
'phone' => 'required|str'
'phone' => 'required|s'
i 对整数值进行强转,如果直接使用参数取值为字符串类型,主要解决当declare(strict_types=1);
时,会报ust be of the type int, string given
使用方法'age' => 'required|i'
string、integer、int 被系统底层占用
http 服务
'phone' => 'required|s|post'
'phone' => 'required|s|get'
// get 验证直接使用empty判断,不能传0、空、false
cookie
Model 模型
约束:只做数据库、缓存操作,不写业务逻辑,业务推荐写在 service 里面
分表自动创建模型
shardingId 方法
model 类中重写表名,原方法$this->db()->table($this->_getTableName($uid))
全局使用方式
分页
行数大于 50 会抛出异常。(无法直接修改,改动太大)
demo 方法
返回结果
全局 uuid
getUuid()
sql 注入
demo 用例
上面这条 sql 可以使用参数过滤做来,如强转 int
上面这条 sql 传入的是一个字符串,如果用参数过滤很容易误杀,必须使用预处理查询
系统底层会监控 sql 语句,发现原生 sql 语法,自动报警
Redis 使用
getPrefix 缓存前缀
getPrefix('Cache', 'hash')
全局用法
zset 全局分页
新增穿透缓存注解
异常
code 必须为 int,还不是 "0"
普通异常
code 异常
empty 异常
访问 rpc 服务
Elasticsearch 搜索
统一日志处理
全局方法:TheFairLib\Library\Logger::get()
level 日志等级
- DEBUG (100): 详细的debug信息。
- INFO (200): 关键事件。
- NOTICE (250): 普通但是重要的事件。
- WARNING (300): 出现非错误的异常。
- ERROR (400): 运行时错误,但是不需要立刻处理。
- CRITICA (500): 严重错误。
- EMERGENCY (600): 系统不可用。
其他日志处理
hyperf service 服务之间的访问
配置文件 config/autoload/services.php
新建 RpcClient
访问
文档同步
composer doc
使用 tips:
1.注意:默认会在对应的项目下生成与各个接口 Doc 注解中填写的 tag 字段的第一个值为准,
比如在 controller 下定义:
那么会在项目下创建一个 user 的分类:
2.默认只会新增不存在的接口(以接口的 scheme 做唯一识别,如 /v1/test/test
),所以当你做了接口改动,需要覆盖现有接口文档时,你可以:
-
到文档中删除接口,然后重新在本地执行
composer gen_doc
-
或者在 config/autoload/docs.php 的 force_update 中添加配置,值为你要选择覆盖的接口 path,例如:
那么每次执行文档命令,都会以你本地最新的结果为准同步到在线文档。
- 接口访问后的 response 文件默认是不覆盖的,可以在 runtime 下删除对应的 .json 文件来更新 response 结果,也可以在 docs.refresh_response_file 中加入配置项,保持 response 文件持续更新
线上服务启动
systemd 管理
用于 centos 7
在项目下新建:bin/push.service
使用ln -s /home/xxx/www/push_service/bin/push.service /usr/lib/systemd/system && systemctl daemon-reload && systemctl enable push.service
单元测试
格式化项目代码
静态语法检测
其他问题
rpc或http 返回结果 500404
,请重试
常用方法,可全局调用
All versions of thefairlib with dependencies
ext-swoole Version >=4.5
ext-json Version *
ext-redis Version *
ext-posix Version *
hyperf/cache Version ~2.1.0
hyperf/command Version ~2.1.0
hyperf/config Version ~2.1.0
hyperf/contract Version ~2.1.0
hyperf/database Version ~2.1.0
hyperf/db-connection Version ~2.1.0
hyperf/devtool Version ~2.1.0
hyperf/di Version ~2.1.0
hyperf/dispatcher Version ~2.1.0
hyperf/event Version ~2.1.0
hyperf/exception-handler Version ~2.1.0
hyperf/framework Version ~2.1.0
hyperf/guzzle Version ~2.1.0
hyperf/http-server Version ~2.1.0
hyperf/logger Version ~2.1.0
hyperf/memory Version ~2.1.0
hyperf/paginator Version ~2.1.0
hyperf/pool Version ~2.1.0
hyperf/process Version ~2.1.0
hyperf/redis Version ~2.1.0
hyperf/utils Version ~2.1.0
hyperf/json-rpc Version ~2.1.0
hyperf/rpc Version ~2.1.0
hyperf/rpc-client Version ~2.1.0
hyperf/rpc-server Version ~2.1.0
hyperf/constants Version ~2.1.0
hyperf/async-queue Version ~2.1.0
hyperf/model-cache Version ~2.1.0
hyperf/task Version ~2.1.0
hyperf/translation Version ~2.1.0
hyperf/validation Version ~2.1.0
hyperf/rate-limit Version ~2.1.0
hyperf/retry Version ~2.1.0
hyperf/crontab Version ~2.1.0
hyperf/filesystem Version ~2.1.0
hyperf/signal Version ~2.1.0
hyperf/service-governance Version ~2.1.0
hyperf/nacos Version ~2.1.0
yurunsoft/phpmailer-swoole Version ~1.0
xxtime/flysystem-aliyun-oss Version ^1.5
overtrue/flysystem-qiniu Version ~1.0
lmz/hyperf-config Version ~2.1.0
emojione/emojione Version ^4.5
overtrue/wechat Version ~4.0