從 v1.13 升級到 v1.14
令人興奮的新功能 🎉
功能增強 🚀
- gin 和 fiber 驅動支持設置 body_limit 和 header_limit
- Log 新增方法
- Orm 新增方法
- Console 新增方法
- Response 新增方法
- 新增 Build 命令
- 新增 helper 方法
- Redis 驅動支持 TLS
破壞性變化 🛠
- Validation 如果驗證失敗將不綁定數據
- Testing 模塊新增、修改方法
- 優化 Mail 模塊的 Queue 方法
- 優化 Auth 模塊 ctx 的設置方法
- 優化 mock facades 的方式
- 框架 Orm model 新增 json tag
v1.14.1
v1.14.2
v1.14.3
同時升級:goravel/gin: v1.2.2, goravel/fiber: v1.2.2
v1.14.4
同時升級:goravel/gin: v1.2.3
v1.14.5
同時升級:goravel/gin: v1.2.4, goravel/fiber: v1.2.3
v1.14.7
同時升級:goravel/gin: v1.2.5, goravel/fiber: v1.2.4
v1.14.8
v1.14.9
升級指南
Goravel v1.14 基於 Golang 1.21 進行開發與測試,與其他低 Golang 版本一般情況下可以兼容運行。 請根據本節內容,一步步進行框架升級。
預計升級時間:10 分鐘
1. 更新依賴
go get -u github.com/goravel/framework@v1.14.7
// 如果使用 gin
go get -u github.com/goravel/gin@v1.2.5
// 如果使用 fiber
go get -u github.com/goravel/fiber@v1.2.4
// 如果使用 redis
go get -u github.com/goravel/redis@v1.2.1
// 如果使用 s3
go get -u github.com/goravel/s3@v1.2.0
// 如果使用 oss
go get -u github.com/goravel/oss@v1.2.0
// 如果使用 cos
go get -u github.com/goravel/cos@v1.2.0
// 如果使用 minio
go get -u github.com/goravel/minio@v1.2.0
// 如果使用 cloudinay
go get -u github.com/goravel/cloudinary@v1.2.0
go mod tidy
2. 新增配置項
config/app.go
新增本地化模組配置項:
"locale": "en",
"fallback_locale": "en",
"providers": []foundation.ServiceProvider{
...
&session.ServiceProvider{},
&translation.ServiceProvider{},
...
}
- 如果需要使用
session
功能,新增 config/session.go 檔案;
3) 如果正在使用 Testing 模組
檢查是否在驗證數據失敗的情況下仍然嘗試讀取綁定值。如果有,需優化邏輯,因為該值升級後為空。詳見:Validation 如果驗證失敗將不綁定數據。 如果是的話,你需要優化邏輯,因為該值在升級後為空。 見:Validation will not bind data if validation fails。
4. 如果正在使用 Testing 模組
檢查是否使用 Clear
, Image
方法,如果有,需相應修改:Testing 模組新增、修改方法
5. 如果正在使用 Mail 模块
檢查是否使用 Queue
方法,如果有,需相應修改:優化 Mail 模塊的 Queue 方法
6. 如果正在使用 Auth 模塊
需相應修改:優化 Auth 模塊 ctx 的設置方法
7. 如果正在使用模擬外觀
需相應修改:優化模擬外觀的方式
8. 如果使用框架 Orm 模型並直接通過端點返回數據
需相應修改:框架 Orm 模型新增 json 標籤
功能介紹
本地化
版本:v1.14.0
安裝器
版本:v1.14.0
通過安裝器,你可以很方便的下載並初始化一個新的 Goravel 項目。
Cookie
版本:v1.14.0
會話
版本:v1.14.0
gin 和 fiber 驅動支持設置 body_limit 和 header_limit
版本:v1.14.0
HTTP 驅動支持設置 body_limit 以限制 body 大小,詳見:goravel/gin 和 goravel/fiber。
Log 新增方法
版本:v1.14.0
方法名 | 描述 |
---|---|
Stack | 同時使用多個日誌通道 |
Channel | 指定日誌通道 |
WithTrace | 打印追蹤 |
Orm 新增方法
版本:v1.14.0
新增 WhereIn
, OrWhereIn
, OrWhereNotIn
, WhereNotIn
, WhereBetween
, WhereNotBetween
, WhereNull
, OrWhereNull
, OrderByDesc
, OrderBy
, InRandomOrder
, Exists
方法。
Console 新增方法
版本:v1.14.0
回應新增方法
版本:v1.14.0
新增 Build 命令
版本:v1.14.0
Goravel 專案可以透過以下命令編譯:go run . artisan build
.
新增輔助方法
版本:v1.14.0
Redis 驅動支持 TLS
版本:v1.14.0
驗證失敗將不會綁定數據
版本:v1.14.0
之前,當呼叫以下方法時,userRequest
仍然綁定值,即使返回了錯誤。 升級後將不再綁定。
var userRequest requests.UserRequest
errors, err := ctx.Request().ValidateRequest(&userRequest)
// 或者
validator, err := validation.Make(***)
err = validator.Bind(&userRequest)
為 Testing 模塊新增方法和修改方法
版本:v1.14.0
database, err := facades.Testing().Docker().Database()
database.Image(testingcontract.Image{
Repository: "mysql",
Tag: "5.7",
Env: []string{
"MYSQL_ROOT_PASSWORD=123123",
"MYSQL_DATABASE=goravel",
},
-- Timeout: 1000,
++ ExposedPorts: []string{"3306"},
})
優化 Mail 模塊的 Queue 方法
版本:v1.14.0
Queue
方法的入參由 queue *mail.Queue
改為 queue ...mail.Queue
。
-- facades.Mail().Queue(nil)
++ facades.Mail().Queue()
-- facades.Mail().Queue(&mail.Queue{})
++ facades.Mail().Queue(mail.Queue{})
優化 Auth 模塊 ctx 的設置方法
版本:v1.14.0
之前呼叫 Parse
,User
,Login
,LoginUsingID
,Refresh
,Logout
方法時,您需要傳遞 ctx
。 升級後不再需要傳遞 ctx
,可以直接在 facades.Auth(ctx)
中設置。
-- facades.Auth().Parse(ctx, token)
++ facades.Auth(ctx).Parse(token)
-- facades.Auth().User(ctx, &user)
++ facades.Auth(ctx).User(&user)
-- facades.Auth().Login(ctx, &user)
++ facades.Auth(ctx).Login(&user)
-- facades.Auth().LoginUsingID(ctx, id)
++ facades.Auth(ctx).LoginUsingID(id)
-- facades.Auth().Refresh(ctx)
++ facades.Auth(ctx).Refresh()
-- facades.Auth().Logout(ctx)
++ facades.Auth(ctx).Logout()
優化 mock facades 的方式
版本:v1.14.0
import github.com/goravel/framework/testing/mock
++ mockFactory := mock.Factory()
-- app := mock.App()
++ app := mockFactory.App()
-- artisan := mock.Artisan()
++ artisan := mockFactory.Artisan()
-- auth := mock.Auth()
++ auth := mockFactory.Auth()
-- artisan := mock.Artisan()
++ artisan := mockFactory.Artisan()
-- cache, driver, lock := mock.Cache()
++ cache := mockFactory.Cache()
++ driver := mockFactory.CacheDriver()
++ lock := mockFactory.CacheLock()
-- config := mock.Config()
++ config := mockFactory.Config()
-- crypt := mock.Crypt()
++ crypt := mockFactory.Crypt()
-- event, task := mock.Event()
++ event := mockFactory.Event()
++ event := mockFactory.EventTask()
-- gate := mock.Gate()
++ gate := mockFactory.Gate()
-- grpc := mock.Grpc()
++ grpc := mockFactory.Grpc()
-- hash := mock.Hash()
++ hash := mockFactory.Hash()
-- mock.Log()
++ mockFactory.Log()
-- mail := mock.Mail()
++ mail := mockFactory.Mail()
-- orm, query, transaction, association := mock.Orm()
++ orm := mockFactory.Orm()
++ query := mockFactory.OrmQuery()
++ transaction := mockFactory.OrmTransaction()
++ association := mockFactory.OrmAssociation()
-- queue, task := mock.Queue()
++ queue := mockFactory.Queue()
++ task := mockFactory.QueueTask()
-- rateLimiter := mock.RateLimiter()
++ rateLimiter := mockFactory.RateLimiter()
-- storage, driver, file := mock.Storage()
++ storage := mockFactory.Storage()
++ driver := mockFactory.StorageDriver()
++ file := mockFactory.StorageFile()
-- seeder := mock.Seeder()
++ seeder := mockFactory.Seeder()
-- validation, validator, errors := mock.Validation()
++ validation := mockFactory.Validation()
++ validator := mockFactory.ValidationValidator()
++ errors := mockFactory.ValidationErrors()
-- view := mock.View()
++ view := mockFactory.View()
框架 Orm model 新增 json tag
版本:v1.14.0
如果您正在使用框架的 Orm 模型並通過端點直接返回數據,您需要根據舊的創建新模型並替換舊的,或前端需要根據 json tag 修改字段名。
type Model struct {
-- ID uint `gorm:"primaryKey"`
++ ID uint `gorm:"primaryKey" json:"id"`
Timestamps
}
type SoftDeletes struct {
-- DeletedAt gorm.DeletedAt `gorm:"column:deleted_at"`
++ DeletedAt gorm.DeletedAt `gorm:"column:deleted_at" json:"deleted_at"`
}
type Timestamps struct {
-- CreatedAt carbon.DateTime `gorm:"autoCreateTime;column:created_at"`
-- UpdatedAt carbon.DateTime `gorm:"autoUpdateTime;column:updated_at"`
++ CreatedAt carbon.DateTime `gorm:"autoCreateTime;column:created_at" json:"created_at"`
++ UpdatedAt carbon.DateTime `gorm:"autoUpdateTime;column:updated_at" json:"updated_at"`
}
修復 session 在 gin 驅動中設置不成功的問題
goravel/framework: v1.14.1
修復本地化模塊中語言文件讀取錯誤的問題
goravel/framework: v1.14.1
修復 Validation 驗證 image 和 file 失敗的問題
goravel/framework: v1.14.2
goravel/gin: v1.2.2
goravel/fiber: v1.2.2
修復 goravel/gin 驅動設置 cookie Expires 無效的問題
goravel/gin: v1.2.2
修復 Validation 無法綁定 slice 的問題
goravel/framework: v1.14.3
type User struct {
Tags []string `form:"tags" json:"tags"`
}
Validation 支持綁定 carbon
goravel/framework: v1.14.3
// 定義 carbon 字段
type User struct {
Date carbon.Carbon `form:"date" json:"date"`
}
var user requests.User
// 使用 ValidateRequest 綁定數據
errors, err := ctx.Request().ValidateRequest(&user)
// 或使用 Validate 綁定數據
validator, err := ctx.Request().Validate(map[string]string{
"date": "required|date",
})
err := validator.Bind(&user)
// 獲取時間
user.Date.ToDateTimeString()
修復 Session 並發問題
goravel/framework: v1.14.4
當 Session 并發過高時,可能會出現 Session 讀寫衝突的問題。
修復 Gin 設置 Session same_site 無效的問題
goravel/gin: v1.2.3
Route 新增 Shutdown 方法
goravel/framework: v1.14.5
goravel/gin: v1.2.4
goravel/fiber: v1.2.3
優化 HTTP 的 ctx.WithValue 方法
goravel/framework: v1.14.7
goravel/gin: v1.2.5
goravel/fiber: v1.2.4
ctx.WithValue
方法的 key
由僅支持 string
類型,改為支持 any
類型。
ctx.WithValue("Hello", "world")
ctx.WithValue(1, "hi")
var key struct{}
ctx.WithValue(key, "hola")
修復註冊 listener 衝突的問題
goravel/framework: v1.14.8
多個事件使用相同的 listener,註冊時會提示 listener 衝突。
修復自定義 Log 驅動控制台重複打印的問題
goravel/framework: v1.14.9
修復 HTTP JSON 請求包含多層結構時數據綁定錯誤的問題
goravel/framework: v1.14.9