從 v1.11 升級到 v1.12
v1.12.6
錯誤修復 🐛
v1.12.5
錯誤修復 🐛
v1.12.4
錯誤修復 🐛
v1.12.3
錯誤修復 🐛
v1.12.2
錯誤修復 🐛
v1.12.1
錯誤修復 🐛
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 tidy
go 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
驅動的默認支持,轉由獨立擴展包提供支持。 在此次升級中,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 的類型
為了使時間類型在 API 輸出時更加標準,CreatedAt
、UpdatedAt
的類型由 time.Time
修改為 carbon.DateTime
. 如果你對這兩個欄位進行了額外處理,可以通過 CreatedAt.ToStdTime()
方法獲取原有的 time.Time
類型。
10. 優化 Validation 模塊的校驗規則
檢查原有校驗規則中的零值,例如,若規則設置為 date
且未設置 required
,若該欄位為空或未傳入,校驗模塊將提示該欄位為必填。 優化後,校驗模塊會通過檢查,更符合使用直覺。 如果你用到了相關校驗,請確保升級後與預期一致。
11. 再次安裝依賴
運行 go mod tidy
功能介紹
服務容器
版本:v1.12.0
Goravel 中所有服務都註冊到服務容器當中,為第三方包的開發提供有力的支持,詳見文檔。
擴展包開發
版本:v1.12.0
包是向 Goravel 添加功能的主要方式,可以使 Goravel 的生態更加豐富,詳見文檔。
Artisan Flag 新增方法
版本:v1.12.0
為 Artisan 模塊新增獲取不同類型 Flag
的方法,詳見文檔
新增 Helpers 方法
版本:v1.12.0
新增 path
和 carbon
Helpers 方法,您可以輕鬆獲取項目的路徑信息並處理時間,詳見文檔。
升級依賴
版本:v1.12.0
為提供更好的功能支持,升級了 Goravel 依賴的所有包的版本。
Migration 新增命令
版本:v1.12.0
命令 | 操作 |
---|---|
migrate:fresh | 刪除所有表並重新運行所有遷移 |
migrate:refresh | 回滾所有遷移並重新運行所有遷移 |
migrate:reset | 回滾所有資料庫遷移 |
migrate:status | 查詢遷移狀態 |
部分 make
命令支持子文件夾
版本: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 的問題
版本:v1.12.1
修復 Windows 下,make
命令自動創建文件夾時,由於反斜杠引發 panic 的問題。
facades.Gate() 返回 nil 的問題
版本:v1.12.2
修復 facades.Gate() 返回 nil 的問題。
Windows 下 make:package 命令的問題
版本:v1.12.3
修復 Windows 下 make:package 命令創建的文件中的路徑錯誤的問題。
throttle 中間件 panic 的問題
版本:v1.12.4
修復 throttle 中間件 panic 的問題。
修復 facades.Orm().Query().Load() 的問題
版本:v1.12.5
修復 facades.Orm().Query().Load()
某種情況下無法正確加載模型的問題。
修復 JWT 的問題
版本:v1.12.6
修復 JWT Token 過期且無效時,返回過期錯誤的問題,預期優先返回無效錯誤。