Appearance
升级说明
4.2
4.2.112
- 移除
Apidoc, 生成监听以及Console上报的功能 - 修复了 Resp 类中
Session::previousUrl()的部分方法 - 移除了
Clockwork和Progress相关的控制器和视图 - 框架登录增加变量
poppy.mgr-page.account_login用来隐藏登录入口
4.2.104
alibabacloud/sts-201504011.1.5 版本存在Error: Call to undefined method Darabonba\OpenApi\Utils::getEndpointRules()错误, 固定版本解决- 重写 aliyun-oss 中的变量读取方式, 支持单元测试变量覆盖
4.2.103
自这个版本起, 所有的项目均采用同样的版本定义
poppy/sms
- 变量不在初始化中获取, 减少内存读取
- 短信发送服务商可以不重启即可更换
poppy/aliyun-oss
- 变量移动到使用时候获取
poppy/aliyun-push
- 变量移动到使用时候获取
poppy/mgr-page
- 变量移动到使用时候获取
poppy/system
- 变量移动到使用时候获取
- 移除 Develop 类
- 更改密钥为命令行配置, 依赖于环境变量, 不依赖于缓存
poppy/ext-alipay
- 移除 ExtensionServiceProvider 加载项
2025-06-02
poppy/system (4.2.102)
- 修复
The "" file does not exist or is not readable错误, 对上传的图片未进行有效性判定
2023-12-12
poppy/system (4.2.85)
- captcha 发送进行类型验证, 手机号 int 类型无法传值
poppy/ext-ip_store (4.2.2)
- 更新最新版纯真库, 支持 poppy.php 进行配置, 默认为 mon17
poppy/aliyun-oss (4.2.5)
- 支持 env 单元测试, 只保留 putObject STS 授权,移除 put*
2023年06月27日
poppy/mgr-page
- update layui 2.8.8‒ bootstrap 5.3‒ remove standlone layer, use layui layer
4.1 - 4.2 升级说明
4.1 - 4.2 主要对严格模式进行升级, 所有升级到 4.2 包的用户建议将项目内容升级到严格模式
- [x] 严格模式
- [x] 移除 fontawesome 字体, 使用 bootstrap icons
- [x] 支持用户密码的复杂配置
- [x] 支持后台绑定手机号, 支持后台手机号和用户名的切换登录
并非所有的都进行记录, 具体的记录见版本 TAG 记录
4.0 - 4.1 升级说明
本次升级目的是把 modules 加载更改为支持 PSR-4 的加载规范以便于可以运行单元测试和代码覆盖率测试
- [x] 目录命名 / 加载的路由命名
- [x] 生成模块
- [x] 数据库生成以及各种的 Make 生成
包批量改动
安装 composer 包 poppy/code-generator 4.1
shell
$ composer require poppy/code-generator 4.1重命名目录
shell
$ php artisan py-code-generator:src-rename demo移除所有的 modules 文件夹, 并进行 git 提交, 以防止大小写问题导致的命名失败情况
重命名 module -> modules 文件夹
添加 composer 自动加载, 并启用新命名空间 composer dumpautoload
json
{
"autoload": {
"psr-4": {
"Demo\\": "modules/demo/src/"
},
"files": [
"modules/demo/src/Classes/functions.php"
]
}
}移除 modules/demo/manifest.json 中的 autoload 自动加载字段, 自动加载的文件使用 composer 进行加载
模块调整
模块的数据库 src/database/migrations 加载移动到 modules/demo/resources/migrations 目录下
模块的 Seeder src/database/seeds 加载移动到 src/Seeds 目录下
Framework
移除 Poppy\Framework\Foundation\Bootstrap\RegisterClassLoader 注册 ClassLoader
移除 \Poppy\Framework\Classes\ClassLoader
移除 \Poppy\Framework\Classes\Mocker , 测试使用自动化 + faker 去进行接口测试, 所以无需使用 Moker 进行接口返回
新生成的模块需要手动加载 PSR-4 规范并且目录已经按照新目录进行调整
json
{
"...": [],
"autoload": {
"psr-4": {
"Demo\\": "modules/demo/src/",
"Demo\\Tests\\": "modules/demo/tests/"
}
},
"._.": []
}Core
移除 phplint , 使用 phpstan 作为默认静态代码工具
System
废弃 \Poppy\System\Http\Exception\Handler 类, 异常处理改为 \Poppy\Framework\Foundation\Exception\Handler
对异常处理进行优化性改写, 移除重复 dontReport 异常, 对异常的提示进行多语言改写, 对模型提示提供 poppy_friendly 方法进行语言转义
3.2 升级到 4.0
此次版本是对框架进行大规模升级
- [x] (framework) 移除框架的文件加载
- [x] (framework) 移除 Mocker, 采用 seldom 自动化接口测试框架
- [x] (framework) sami 文档生成工具替换为 doctum
- [x] (system) 异常处理推荐
Framework的Handler - [x] (system) 分离 system 的 mgr-page
- [x] (system) 移除
ui.yaml文件定义 - [x] (system) 移除
JwtAuthGuard和jwt包重复 - [x] (core) 接口使用 js eval 来执行, 来源自 apidoc 升级
- [x] (module) migration 目录和 seeds 目录变更
- [x] (ext) 加入 phpstan 进行静态代码分析
建议
使用 Guzzle\Client 替代掉 Curl\Curl , 写法等均需要变动
Framework
不兼容
移除 x_app 函数, 此函数在 3.2 中废弃, 因为 nginx 无法从 json 中获取需要的数据, 需要显式使用 x_header 来获取
todo : 关于 Header 的定义需要完善
jwt_token 方法取消参数传递, 使用 jwt 的 tymon.jwt 来获取
[2022-06-10] 主 ServiceProvider \Poppy\Framework\Support\PoppyServiceProvider 变量 $listens 和 $policies 使用 array 强类型模式
可替代
移除 TestCase->poppyContainer() 方法, 使用 Container::getInstance() 替代
移除 Resp->data() 方法, 使用 Resp->custom() 替代
移除 get(), post() 方法, 使用 input() 替代
调整
[2022-06-10] 对于后置加载的 ServiceProvider, 需要继承 \Illuminate\Contracts\Support\DeferrableProvider 类, 取消 $defer 属性
Core
不兼容
因为 apidoc 升级导致无法生成 json , mgr-page 中无法使用新版来生成 apidoc 文档, 必须使用新版本才可以解析 json 数据, 使用 js eval 来解析
ServiceArray 改动 key() 方法需要强制返回 string
可替代
因为 sami 维护, 无法生成新版本 php api 文档, 使用 doctum 替代 sami, 接口不变, 可重新生成
移除 RdsNative->delTaggedKeys() , 使用 RdsNative->del() 替代
移除 sys_success() 方法, 使用 sys_info() 替代
System
不兼容
ApiSignContract 方法 sign 增加参数 $type , 使该方法同时支持不同端签名
diff
class DefaultApiSignProvider extends DefaultBaseApiSign
{
- public function sign(array $params): string
+ public function sign(array $params, $type = 'user'): string
{
...
}
}移除 \Poppy\System\Classes\HtmlParser 类, 不必封装过多无用的类, 以核心为主
移除 SettingRepository 的 setReRead() , save() 方法
此方法 3.2 已经重新改写为从缓存直接读取, 不使用静态变量
移除 pages.yaml 的定义以及读取, 改用 mgr-page/mgr-app 的 Form 写法
相关影响 : Module->pages() , Module/Repositories/ModulesPage , ModuleManager->pages()
移除 settings.yaml 的定义以及读取, 不支持项目默认数据在 settings.yaml 的定义
相关影响 : Module/Repositories/ModulesSetting , ModuleManager->settings()
移除 ui.yaml 的定义以及读取, 不支持项目默认数据在 ui.yaml 的定义
相关影响 : 移除 Module/Repositories/ModulesUi , 移除 ModuleManager->uis() , 移除 Classes\Contracts\UiContract
移除 ModuleManager->getExcepts() 的定义以及读取(无相关用途)
移除 \Poppy\System\Action\Pam::setPasswordById , 使用 \Poppy\System\Action\Pam::setPassword 替代, 参数不一致, 需要注意
移除 \Poppy\System\Classes\Contracts\UploadContract::type , 使用 \Poppy\System\Classes\Uploader\Uploader::kvExt 替代, 参数有差异
移除 \Poppy\System\Action\Pam::captchaLogin , 参数 platform 替换为 guard 类型, platform 从 header 中进行取值
移除
\Poppy\System\Models\PamAccount::fetch() : 多余的字段查询
\Poppy\System\Models\PamAccount::getIdByUsername() : 频率低, 无用函数
\Poppy\System\Models\PamAccount::getTypeById() : 频率低, 无用函数Pam 中 loginCheck 移除 loginAllowIpCheck 方法(次级别调用), 会影响(ydl) 项目, 移除 \System\Events\LoginSuccessEvent 调用方法
diff
public function loginCheck(string $passport, string $password, string $guard_name = PamAccount::GUARD_WEB): bool
{
- event(new LoginBannedEvent($pam, $guard));
- if (method_exists($this, 'loginAllowIpCheck') && !$this->loginAllowIpCheck()) {
- $guard->logout();
- return false;
- }
- // 兼容存在 system 模块事件
- // deprecated 为了兼容 q2
- if (class_exists('\System\Events\LoginSuccessEvent')) {
- event(new \System\Events\LoginSuccessEvent($pam, $platform, $guard));
- return true;
- }
...
}可替代
移除 ModuleManager->repository() , 使用 ModuleManager->modules() 替代
移除 sys_container , 使用 py_container 替代
移除 \Poppy\System\Classes\Abstracts\SysRouteServiceProvider , 使用框架 \Poppy\Framework\Application\RouteServiceProvider 替代
移除 \Poppy\System\Action\Pam::passportType , 使用 PamAccount::passportType() 替代
移除 \Poppy\System\Action\Verification::getHiddenStr , 使用 \Poppy\System\Action\Verification::getHidden 替代, 因为返回不仅仅是字串, 可能还会有数组
移除 \Poppy\System\Tests\Base\SystemTestCase::export , 使用 \Poppy\Framework\Application\TestCase::outputVariables 替代, 使用 stream 打印数据, 可保证运行无异常提示
移除 \Poppy\System\Events\LoginSuccessEvent 的 platform 参数, 使用 x-id 替代
继承项目 \Poppy\System\Http\Forms\Settings\FormSettingBase 更新为 Poppy\MgrPage\Classes\Form\FormSettingBase , 同理 Grid 也会迁移, 这里是对页面的组织对 mgr-page 做的一个调整
services 钩子改动
移除 poppy.system.html_top_nav 更改为 poppy.mgr-page.html_top_nav 并移动到 mgr-page 中
移除 poppy.system.html_cp 更改为 poppy.mgr-page.html_cp 并移动到 mgr-page 中
移除 poppy.system.settings 更改为 poppy.mgr-page.settings 并移动到 mgr-page 中
移除 poppy.system.custom_settings , 此服务并入 poppy.mgr-page.settings
接口
接口需要增加标准化参数 x-type 用来指定是前台用户还是后台用户, 默认是 user
重复
移除 JwtAuthGuard , 和 Jwt 包数据重复
移除
移除 PamAccount->getJWTCustomClaims() 的 user.id 返回, 改返回和 jwt 的 sub 一致, 不必再多余返回, 无兼容性问题
Aliyun-Oss
可替代
移除 Action/ActSts 类, 使用 Sts 类, 仅仅改动命名
移除 Action/OssDefaultUploadProvider , 使用 Classes\Provider\OssDefaultUploadProvider , 若依赖于 4.0 组件则此问题不必关注.
MgrPage
可替代
移除 \Poppy\MgrPage\Classes\Form\Field\Number 的 min 和 max 方法, 使用后端服务规则校验 Rule::min , Rule::max
更新记录
2025年06月17日
- 所有的子项目均采用同样的标签定义
