从 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

令人兴奋的新功能 🎉

功能增强 🚀

破坏性变化 🛠

升级指南

请根据本节内容,一步步进行框架升级。

预计升级时间: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.Artisanfacades.Artisan()
facades.Authfacades.Auth()
facades.Cachefacades.Cache()
facades.Configfacades.Config()
facades.Cryptfacades.Crypt()
facades.Eventfacades.Event()
facades.Gatefacades.Gate()
facades.Grpcfacades.Grpc()
facades.Hashfacades.Hash()
facades.Logfacades.Log()
facades.Mailfacades.Mail()
facades.Ormfacades.Orm()
facades.Queuefacades.Queue()
facades.RateLimiterfacades.RateLimiter()
facades.Routefacades.Route()
facades.Schedulefacades.Schedule()
facades.Storagefacades.Storage()
facades.Validationfacades.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 以外的驱动,请参考对应驱动文档进行安装:

驱动地址
S3https://github.com/goravel/s3open in new window
OSShttps://github.com/goravel/ossopen in new window
COShttps://github.com/goravel/cosopen in new window
Miniohttps://github.com/goravel/minioopen in new window

8. Cache 模块取消对 Redis 驱动的默认支持

如果您没有使用 redis 驱动,删除 config/cache.go::stores 中的 redis 键:

// 修改后
"stores": map[string]any{
  "memory": map[string]any{
    "driver": "memory",
  },
},

如果您用到了 redis 驱动,请参考文档进行安装:

驱动地址
Redishttps://github.com/goravel/redisopen in new window

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/AuthPolicyapp/policies/User/auth_policy.go
make:command Goravel/CleanCacheapp/console/commands/Goravel/clean_cache.go
make:model User/Phoneapp/models/User/phone.go
make:observer User/PhoneObserverapp/observers/User/phone_observer.go
make:event User/GoravelEventapp/events/User/goravel_event.go
make:listener User/GoravelListenapp/listeners/User/goravel_listen.go
make:controller User/AuthControllerapp/http/controllers/User/auth_controller.go
make:middleware User/Authapp/http/middleware/User/auth.go
make:request User/Authapp/http/requests/User/auth.go
make:job Goravel/Jobapp/jobs/Goravel/job.go
make:rule User/Phoneapp/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 过期且无效时,返回过期错误的问题,预期优先返回无效错误。