GoravelGoravel
首页
视频
  • English
  • 简体中文
GitHub
首页
视频
  • English
  • 简体中文
GitHub
  • 前言

    • 升级指南

      • 从 v1.14 升级到 v1.15
      • 从 v1.13 升级到 v1.14
      • 历史版本升级
    • 贡献指南
    • 优秀扩展包
  • 入门指南

    • 安装
    • 配置信息
    • 文件夹结构
    • 编译
  • 核心架构

    • 请求周期
    • 服务容器
    • 服务提供者
    • Facades
  • 基本功能

    • 路由
    • HTTP 中间件
    • 控制器
    • 请求
    • 响应
    • 视图
    • Grpc
    • Session
    • 表单验证
    • 日志
  • 综合话题

    • Artisan 命令行
    • 缓存系统
    • 事件系统
    • 文件储存
    • 邮件
    • 队列
    • 任务调度
    • 本地化
    • 扩展包开发
    • 颜色
    • Strings
    • 辅助函数
  • 安全相关

    • 用户验证
    • 用户授权
    • 加密解密
    • 哈希
  • ORM

    • 快速入门
    • 模型关联
    • 数据库迁移
    • 数据填充
    • 模型工厂
  • 测试相关

    • 快速入门
    • HTTP Tests
    • Mock

从 v1.12 升级到 v1.13

令人兴奋的新功能 🎉

  • 数据填充
  • 模型工厂
  • 集成测试
  • 视图

功能增强 🚀

  • Go 默认版本升级为 1.20
  • 任务调度支持横向伸缩
  • 新增 debug 方法
  • make:controller 命令新增参数
  • Response 新增 Status 方法
  • Orm 新增 Sum 和 Cursor 方法
  • Route 模块支持配置驱动
  • Request 新增 InputArray 和 InputMap 方法
  • Orm 模型支持自定义链接
  • Filesystem 模块新增 Cloudinary 驱动
  • Log 新增链式方法

v1.13.4

  • 服务启动支持环境变量

破坏性变化 🛠

  • 移除默认加载的 HTTP 全局中间件
  • 优化 Controller 返回
  • 修改 facades.Route() 中 Group 方法的入参
  • 优化 facades.Cache() 中 Remember 与 RememberForever 方法(如果用到)
  • 修改 access.NewAllowResponse 与 access.NewDenyResponse 包名(如果用到)
  • 移除废弃方法(如果用到)

Bug 修复 🐛

  • 修复 facades.Auth().User() 的问题
  • 修复自定义 .env 路由某些情况下不生效的问题
  • 修复 JWT 中设置 ttl == 0 时 token 立即过期的问题

v1.13.2

  • 修复 facades.Storage().Url() 在 windows 系统下路径错误的问题
  • 修复 Postgres 密码为空时连接异常的问题
  • 修复使用 Orm Cursor 方法时 With 方法无效的问题

v1.13.4

  • 修复 validation 无法校验路由参数的问题
  • 修复 Fiber 驱动无法返回文件的问题
  • 修复 Fiber 驱动全局中间件 panic 的问题
  • 修复 Fiber 驱动的 ContentType 设置与 Gin 驱动不同的问题

v1.13.5

  • 修复模型自定义链接不生效
  • 修复 Mock Log 报错

v1.13.6 v1.13.7

  • 修复队列任务链非线性执行的问题

v1.13.8

  • 修复使用不同 Guard 多次调用 facades.Auth().Parse() 数据被覆盖的问题
  • 修复使用 facades.Orm().WithContext() 设置 ctx 无法被正确传达到 event.Context() 的问题
  • 优化队列日志根据 APP_DEBUG 设置显示

v1.13.9

  • 修复 Log 换行错误的问题
  • 修复 vendor:publish 命令无法发布多层文件夹的问题

v1.13.10

  • 修复 Log 中 traces 错误的问题
  • 修复 orm event 中 GetAttribute 方法返回数据错误的问题
  • ORM 新增 ToSql, ToRawSql 方法

升级指南

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

预计升级时间:10 分钟

1. 更新依赖

go.mod 中更新依赖:

go get -u github.com/goravel/framework@v1.13.9 && go get -u github.com/goravel/gin

2. 新增文件

tests

database/seeders/database_seeder.go

app/providers/database_service_provider.go

3. 注册新的 Provider

注意顺序:

import (
  "github.com/goravel/framework/testing"
  "github.com/goravel/gin"
)

// config/app.go
"providers": []foundation.ServiceProvider{
  ...
  &validation.ServiceProvider{},
  // New
  &testing.ServiceProvider{}, 
  &providers.AppServiceProvider{},
  ...
  &providers.ValidationServiceProvider{},
  // New
  &providers.DatabaseServiceProvider{}, 
  // New
  &gin.ServiceProvider{}, 
}

4. 新增配置

修改 config/http.go

import (
  "github.com/goravel/framework/contracts/route"
  "github.com/goravel/framework/facades"
  ginfacades "github.com/goravel/gin/facades"
)

config.Add("http", map[string]any{
  // HTTP Driver
  "default": "gin",
  // HTTP Drivers
  "drivers": map[string]any{
    "gin": map[string]any{
      "route": func() (route.Route, error) {
        return ginfacades.Route("gin"), nil
      },
    },
  },
  ...
}

修改 config/cors.go

config.Add("cors", map[string]any{
  ...
  // New
  "paths":                []string{"*"}, 
  "allowed_methods":      []string{"*"},
  ...
}

5. 移除默认加载的 HTTP 全局中间件

  1. tls 与 cors 中间件已集成至默认 HTTP 驱动中,因此 app/http/kernel.go 文件中的 middleware.Cors() 与 middleware.Tls() 需被移除。

  2. app/providers/route_service_provider.go 文件中 facades.Route().GlobalMiddleware(http.Kernel{}.Middleware()...) 方法从 Register 移动至 Boot:

package providers

...

type RouteServiceProvider struct {
}

func (receiver *RouteServiceProvider) Register(app foundation.Application) {
}

func (receiver *RouteServiceProvider) Boot(app foundation.Application) {
  //Add HTTP middleware
  facades.Route().GlobalMiddleware(http.Kernel{}.Middleware()...)

  receiver.configureRateLimiting()

  routes.Web()
}

func (receiver *RouteServiceProvider) configureRateLimiting() {

}

6. 优化 Controller 返回

Controller 增加返回值 http.Response,ctx.Response() 可直接返回,不需要再单独 return,使逻辑更加流畅:

// Before
func (r *UserController) Show(ctx http.Context) {
  ctx.Response().Success().Json(http.Json{
    "Hello": "Goravel",
  })
  return
}

// After
func (r *UserController) Show(ctx http.Context) http.Response {
  return ctx.Response().Success().Json(http.Json{
    "Hello": "Goravel",
  })
}

7. 修改 facades.Route() 中 Group 方法的入参

route.Route 修改为 route.Router:

// Before
facades.Route().Group(func(route route.Route)

// After
facades.Route().Group(func(route route.Router)

8. 修改 facades.Cache() 中 Remember 与 RememberForever 方法(如果用到)

callback 类型由 func() any 修改为 func() (any, error):

// Before
Remember(key string, ttl time.Duration, callback func() any) (any, error)
RememberForever(key string, callback func() any) (any, error)

// After
Remember(key string, ttl time.Duration, callback func() (any, error)) (any, error)
RememberForever(key string, callback func() (any, error)) (any, error)

9. 修改 access.NewAllowResponse 与 access.NewDenyResponse 包名(如果用到)

由 /contracts/auth/access 修改为 /auth/access:

// Before
import "github.com/goravel/framework/contracts/auth/access"

access.NewAllowResponse()
access.NewDenyResponse()

// After
import "github.com/goravel/framework/auth/access"

access.NewAllowResponse()
access.NewDenyResponse()

10. 移除废弃方法(如果用到)

  1. 移除 ctx.Request().Form() 和 ctx.Request().Json() 方法,使用 ctx.Request().Input() 方法替代;

  2. 移除 Log 自定义驱动的 GetLevel, GetTime, GetMessage 方法,使用 Level, Time, Message 方法替代;

  3. 移除 gorm.New 方法,该方法用于直接获取 gorm 实例,已不推荐使用,如有必要,请使用 gorm.NewGormImpl 方法替代;

功能介绍

数据填充

Version: v1.13.1

查看文档

模型工厂

Version: v1.13.1

查看文档

集成测试

Version: v1.13.1

查看文档

视图

Version: v1.13.1

查看文档

Go 默认版本升级为 1.20

Version: v1.13.1

go 1.18 和 1.19 已停止维护,框架相应升级到 1.20,查看详情。如果想继续使用 1.18 和 1.19 版本,修改 go.mod 中的版本号即可,目前它们功能完全兼容。

任务调度支持横向伸缩

Version: v1.13.1

查看文档

新增 debug 方法

Version: v1.13.1

查看文档

make:controller 命令新增参数

Version: v1.13.1

make:controller 命令新增 --resource 参数,可以便捷的生成 CURD struct:

go run . artisan make:controller --resource UserController

Response 新增 Status 方法

Version: v1.13.1

查看文档

Orm 新增 Sum 和 Cursor 方法

Version: v1.13.1

查看文档

Route 模块支持配置驱动

Version: v1.13.1

将 Route 模块原默认驱动 Gin 独立成包,通过配置的方式注入到 Goravel 中。本次优化后,为其他 HTTP 包注入到 Goravel 提供了便捷的通道,目前官方支持两个 HTTP 包:

驱动地址
Ginhttps://github.com/goravel/gin
Fiberhttps://github.com/goravel/fiber

Request 新增 InputArray 和 InputMap 方法

Version: v1.13.1

查看文档

Orm 模型支持自定义链接

Version: v1.13.1

查看文档

Filesystem 模块新增 Cloudinary 驱动

Version: v1.13.1

查看文档

Log 新增链式方法

Version: v1.13.1

查看文档

修复 facades.Auth().User() 的问题

Version: v1.13.1

  1. 修复使用 facades.Auth().User(ctx, &user) 方法时,如果 user 不存在不抛出错误的问题。

  2. 修复当主键非 int 类型时,无法找到 user 的问题;

修复自定义 .env 路由某些情况下不生效的问题

Version: v1.13.1

修复 JWT 中设置 ttl == 0 时 token 立即过期的问题

Version: v1.13.1

预期当 ttl == 0 时,token 永不过期。

修复 facades.Storage().Url() 在 windows 系统下路径错误的问题

Version: v1.13.2

Issue #263

修复 Postgres 密码为空时连接异常的问题

Version: v1.13.2

Issue #270

修复使用 Orm Cursor 方法时 With 方法无效的问题

Version: v1.13.2

Issue #253

服务启动支持环境变量

Version: v1.13.4

Issue #265

修复 validation 无法校验路由参数的问题

goravel/gin: v1.1.6

goravel/fiber: v1.1.11

Issue #294

修复 Fiber 驱动无法返回文件的问题

goravel/fiber: v1.1.11

Issue #299

修复 Fiber 驱动全局中间件 panic 的问题

goravel/fiber: v1.1.11

Issue #300

修复 Fiber 驱动的 ContentType 设置与 Gin 驱动不同的问题

goravel/fiber: v1.1.11

Issue #296

修复模型自定义链接不生效

goravel/framework: v1.13.5

Issue #312

修复 Mock Log 报错

goravel/framework: v1.13.5

Issue #320

修复队列任务链非线性执行的问题

goravel/framework: v1.13.6 v1.13.7

Issue #341

修复使用不同 Guard 多次调用 facades.Auth().Parse() 数据被覆盖的问题

goravel/framework: v1.13.8

Issue #388

修复使用 facades.Orm().WithContext() 设置 ctx 无法被正确传达到 event.Context() 的问题

goravel/framework: v1.13.8

Issue #390

优化队列日志根据 APP_DEBUG 设置显示

goravel/framework: v1.13.8

Debug 和 Info 级别日志在 APP_DEBUG=false 时将不会被打印。

Issue #389

修复 Log 换行错误的问题

goravel/framework: v1.13.9

Issue #395

修复 vendor:publish 命令无法发布多层文件夹的问题

goravel/framework: v1.13.9

Issue #345

修复 Log 中 traces 错误的问题

goravel/framework: v1.13.10

Issue #402

修复 orm event 中 GetAttribute 方法返回数据错误的问题

goravel/framework: v1.13.10

Issue #405

ORM 新增 ToSql, ToRawSql 方法

goravel/framework: v1.13.10

Issue #411

Edit this page