从 v1.11 升级到 v1.12
v1.12.6
Bug 修复 🐛
v1.12.5
Bug 修复 🐛
v1.12.4
Bug 修复 🐛
v1.12.3
Bug 修复 🐛
v1.12.2
Bug 修复 🐛
v1.12.1
Bug 修复 🐛
v1.12.0
令人兴奋的新功能 🎉
功能增强 🚀
破坏性变化 🛠
- 修改 facades 调用方式
- 优化 Artisan Flag 参数格式
- Filesystem 模块取消对 S3, OSS, COS, Minio 驱动的默认支持
- Cache 模块取消对 Redis 驱动的默认支持
- 修改 Model 中 CreatedAt, UpdatedAt 的类型
- 优化 Validation 模块的校验规则
升级指南
请根据本节内容,一步步进行框架升级。
预计升级时间:30 分钟
1. 更新依赖
go.mod 中更新依赖:
go get -u github.com/goravel/framework@v1.12.0 && go mod tidygo mod tidy 将会抛出一个错误,执行完下面升级步骤即可解决。
2. 修改 bootstrap/app.go
// 修改前
app := foundation.Application{}
// 修改后
app := foundation.NewApplication()3. 修改 facades.*
| 修改前 | 修改后 |
|---|---|
facades.Artisan | facades.Artisan() |
facades.Auth | facades.Auth() |
facades.Cache | facades.Cache() |
facades.Config | facades.Config() |
facades.Crypt | facades.Crypt() |
facades.Event | facades.Event() |
facades.Gate | facades.Gate() |
facades.Grpc | facades.Grpc() |
facades.Hash | facades.Hash() |
facades.Log | facades.Log() |
facades.Mail | facades.Mail() |
facades.Orm | facades.Orm() |
facades.Queue | facades.Queue() |
facades.RateLimiter | facades.RateLimiter() |
facades.Route | facades.Route() |
facades.Schedule | facades.Schedule() |
facades.Storage | facades.Storage() |
facades.Validation | facades.Validation() |
4. 修改 app/providers/*
所有文件增加导入:
import (
"github.com/goravel/framework/contracts/foundation"
)所有 Register, Boot 方法增加 app foundation.Application 入参:
func (receiver *AppServiceProvider) Register(app foundation.Application) {}
func (receiver *AppServiceProvider) Boot(app foundation.Application) {}5. 修改 app/config/app.go
修改导入:
// 修改前
"github.com/goravel/framework/contracts"
"providers": []contracts.ServiceProvider{
// 修改后
"github.com/goravel/framework/contracts/foundation"
"providers": []foundation.ServiceProvider{6. 修改 Artisan 命令中的 Flag(如果用到)
为 []command.Flag 中的项增加 &command.StringFlag 类型:
// 修改前
func (receiver *VendorPublishCommand) Extend() command.Extend {
return command.Extend{
Category: "test",
Flags: []command.Flag{
{
Name: "test",
},
},
}
}
// 修改后
func (receiver *VendorPublishCommand) Extend() command.Extend {
return command.Extend{
Category: "test",
Flags: []command.Flag{
&command.StringFlag{
Name: "test",
},
},
}
}7. Filesystem 模块取消对 S3, OSS, COS, Minio 驱动的默认支持
为减少加载不必要的第三方包,减小打包体积,提高编译效率,Goravel 将逐步剥离各模块驱动到独立扩展包。 本次升级 Filesystem 模块取消对 S3, OSS, COS, Minio 驱动的默认支持,转由独立扩展包提供支持。
删除 config/filesystems.go::disks 中除 local 和正在使用的驱动以外的键:
// 修改后
"disks": map[string]any{
"local": map[string]any{
"driver": "local",
"root": "storage/app",
"url": config.Env("APP_URL", "").(string) + "/storage",
},
},如果你用到了 local 以外的驱动,请参考对应驱动文档进行安装:
| 驱动 | 链接 |
|---|---|
| S3 | https://github.com/goravel/s3 |
| OSS | https://github.com/goravel/oss |
| COS | https://github.com/goravel/cos |
| Minio | https://github.com/goravel/minio |
8. Cache 模块取消对 Redis 驱动的默认支持
如果你没有使用 redis 驱动,删除 config/cache.go::stores 中的 redis 键:
// 修改后
"stores": map[string]any{
"memory": map[string]any{
"driver": "memory",
},
},如果你用到了 redis 驱动,请参考文档进行安装:
| 驱动 | 链接 |
|---|---|
| Redis | https://github.com/goravel/redis |
9. 修改 Model 中 CreatedAt, UpdatedAt 的类型
为了使时间类型在接口输出时更加标准,CreatedAt, UpdatedAt 类型由 time.Time 修改为 carbon.DateTime。 如果你对这两个字段进行了额外处理,可以通过 CreatedAt.ToStdTime() 方法获取原有的 time.Time 类型。
10. 优化 Validation 模块的校验规则
原有校验规则中对零值进行校验,例如设置规则为 date 且没有设置 required,如果该字段为空或未传入,会提示该字段必填。 优化后,将跳过校验,更符合使用直觉。 如果你用到了相关校验,请确保升级后与预期一致。
11. 再次安装依赖
运行 go mod tidy 命令。
功能介绍
服务容器
Version: v1.12.0
Goravel 中所有服务都注册到服务容器当中,为第三方包的开发提供有力的支持,详见文档。
扩展包开发
Version: v1.12.0
包是向 Goravel 添加功能的主要方式,可以使 Goravel 的生态更加丰富,详见文档。
Artisan Flag 新增方法
Version: v1.12.0
为 Artisan 模块新增获取不同类型 Flag 的方法,详见文档。
新增 Helpers 方法
Version: v1.12.0
新增 path, carbon Helpers 方法,可以很方便的获取项目中的路径信息与进行时间处理,详见文档。
升级依赖
Version: v1.12.0
为提供更好的功能支持,升级了 Goravel 依赖的所有包的版本。
Migration 新增命令
Version: v1.12.0
| 命令 | 作用 |
|---|---|
| migrate:fresh | 删除所有表并重新运行所有迁移 |
| migrate:refresh | 回滚所有迁移并重新运行所有迁移 |
| migrate:reset | 回滚所有迁移 |
| migrate:status | 查询迁移状态 |
部分 make 命令支持子文件夹
Version: v1.12.0
| 命令 | 生成文件 |
|---|---|
| make:policy User/AuthPolicy | app/policies/User/auth_policy.go |
| make:command Goravel/CleanCache | app/console/commands/Goravel/clean_cache.go |
| make:model User/Phone | app/models/User/phone.go |
| make:observer User/PhoneObserver | app/observers/User/phone_observer.go |
| make:event User/GoravelEvent | app/events/User/goravel_event.go |
| make:listener User/GoravelListen | app/listeners/User/goravel_listen.go |
| make:controller User/AuthController | app/http/controllers/User/auth_controller.go |
| make:middleware User/Auth | app/http/middleware/User/auth.go |
| make:request User/Auth | app/http/requests/User/auth.go |
| make:job Goravel/Job | app/jobs/Goravel/job.go |
| make:rule User/Phone | app/rules/User/phone.go |
Windows 下因文件路径引发 panic 的问题
Version: v1.12.1
修复 windows 下,make 命令自动创建文件夹时,由于反斜杠引发 panic 的问题。
facades.Gate() 返回 nil 的问题
Version: v1.12.2
修复 facades.Gate() 返回 nil 的问题。
Windows 下 make:package 命令的问题
Version: v1.12.3
修复 Windows 下 make:package 命令创建的文件中的路径错误的问题。
throttle 中间件 panic 的问题
Version: v1.12.4
修复 throttle 中间件 panic 的问题。
修复 facades.Orm().Query().Load() 的问题
Version: v1.12.5
修复 facades.Orm().Query().Load() 某种情况下无法正确加载模型的问题。
修复 JWT 的问题
Version: v1.12.6
修复 JWT Token 过期且无效时,返回过期错误的问题,预期优先返回无效错误。
