跳转到内容

从 v1.13 升级到 v1.14

令人兴奋的新功能 🎉

增强功能 🚀

破坏性变更 🛠

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。 添加配置项

  1. config/app.go 添加本地化模块配置项:
go
"locale": "en",
"fallback_locale": "en",
"providers": []foundation.ServiceProvider{
  ...
  &session.ServiceProvider{},
  &translation.ServiceProvider{},
  ...
}
  1. 如果你想使用 session 功能,添加 config/session.go 文件;

3。 如果使用 Validation 模块

确认是否仍然在数据验证失败后尝试读取绑定值。 如果是这样,你需要优化逻辑,因为升级后该值为空。 参见:验证失败时 Validation 将不会绑定数据

4。 如果使用 Testing 模块

检查是否使用了 ClearImage 方法,如果是,需要相应修改:为 Testing 模块添加新方法和修改方法

5。 如果使用Mail模块

检查是否使用了Queue方法,如果是,需要相应修改:优化Mail的Queue方法

6。 如果使用Auth模块

需要相应修改:优化Auth模块ctx的设置方法

7。 如果使用mock facades

需要相应修改:优化mock facades的方式

8。 如果使用框架Orm模型并通过端点直接返回数据

需要相应修改:框架Orm模型添加json标签

功能介绍

本地化

版本:v1.14.0

查看文档

安装程序

版本:v1.14.0

安装程序允许您轻松下载和初始化新的 Goravel 项目。

查看文档

版本:v1.14.0

查看请求文档

查看响应文档

会话

版本:v1.14.0

查看文档

支持在 Gin 和 Fiber 驱动程序中设置 body_limit 和 header_limit

版本:v1.14.0

HTTP 驱动程序支持设置 body_limit 以限制正文大小, 参见:goravel/gingoravel/fiber

Log 添加新方法

版本:v1.14.0

方法描述
Stack同时使用多个通道
Channel指定一个通道
WithTrace打印跟踪

查看文档

Orm 添加新方法

版本:v1.14.0

添加 WhereInOrWhereInOrWhereNotInWhereNotInWhereBetweenWhereNotBetweenWhereNullOrWhereNullOrderByDescOrderByInRandomOrderExists 方法。

Console 添加新方法

版本:v1.14.0

查看文档

Response 添加新方法

版本:v1.14.0

查看文档

添加 Build 命令

版本:v1.14.0

Goravel 项目可以通过以下命令进行编译:go run .。 artisan build`。

查看文档

添加辅助方法

版本:v1.14.0

Redis驱动支持TLS

版本:v1.14.0

查看文档

验证失败时不会绑定数据

版本:v1.14.0

之前,当调用以下方法时,即使返回错误,userRequest仍然会绑定值。 升级后,将不再绑定。

go
var userRequest requests.UserRequest
errors, err := ctx.Request().ValidateRequest(&userRequest)

// or
validator, err := validation.Make(***)
err = validator.Bind(&userRequest)

为Testing模块添加新方法和修改方法

版本:v1.14.0

  1. 添加 Fresh 方法;
  2. Clear 方法修改为 Stop 方法;
  3. Image 方法添加 ExposedPorts 变量并移除 Timeout 变量;
go
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

diff
-- facades.Mail().Queue(nil)
++ facades.Mail().Queue()

-- facades.Mail().Queue(&mail.Queue{})
++ facades.Mail().Queue(mail.Queue{})

优化 Auth 模块 ctx 的设置方法

版本:v1.14.0

之前在调用 ParseUserLoginLoginUsingIDRefreshLogout 方法时,需要传入 ctx。 升级后,您不再需要传递 ctx,可以直接在 facades.Auth(ctx) 中设置它。

diff
-- 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()

优化 facades 的模拟方式

版本:v1.14.0

diff
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 模型添加 json 标签

版本:v1.14.0

如果你正在使用框架的 Orm 模型并通过端点直接返回数据,你需要根据旧模型创建一个新模型并替换旧模型,或者前端需要根据 json 标签修改字段名称。

go
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"`
}

修复 gin 驱动中 session 未成功设置的问题

goravel/framework: v1.14.1

修复本地化模块无法读取语言文件的问题

goravel/framework: v1.14.1

修复图片和文件的验证失败

goravel/framework: v1.14.2

goravel/gin: v1.2.2

goravel/fiber: v1.2.2

问题 #450

goravel/gin: v1.2.2

修复 Validation 无法绑定切片

goravel/framework: v1.14.3

go
type User struct {
 Tags   []string `form:"tags" json:"tags"`
}

Validation 支持绑定 carbon

goravel/framework: v1.14.3

go
// 定义 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

Issue #455

为 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

The key of the ctx.WithValue method is changed from only supporting the string type to supporting the any type.

go
ctx.WithValue("Hello", "world")
ctx.WithValue(1, "hi")

var key struct{}
ctx.WithValue(key, "hola")

修复监听器注册冲突的问题

goravel/framework: v1.14.8

多个事件使用相同的监听器时,在注册时会提示监听器冲突。

问题 #523

修复自定义 Log 驱动程序控制台重复打印的问题

goravel/framework: v1.14.9

问题 #531

修复 HTTP JSON 请求包含多层结构时数据绑定错误的问题

goravel/framework: v1.14.9

问题 #533

基于 MIT 许可发布