跳轉到內容

從 v1.12 升級到 v1.13

令人興奮的新功能 🎉

功能增強 🚀

v1.13.4

破壞性變化 🛠

錯誤修復 🐛

v1.13.2

v1.13.4

v1.13.5

v1.13.6 v1.13.7

v1.13.8

v1.13.9

v1.13.10

升級指南

請根據本節內容,一步步進行框架升級。

預估升級時間: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

注意順序:

go
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

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

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

5. 移除默認加載的 HTTP 全局中間件

  1. tlscors 中間件已集成至默認 HTTP 驅動中,因此 app/http/kernel.go 文件中的 middleware.Cors()middleware.Tls() 需被移除。

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

go
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.Responsectx.Response() 可直接返回,不需要再單獨 return,使邏輯更加流暢:

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

go
// 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)

go
// 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:

go
// 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 方法替代; 如果必要,請使用 gorm.NewGormImpl 方法替代;

功能介紹

與資料庫中繼資料有關

版本: v1.13.1

查看文檔

模型工廠

版本: v1.13.1

查看文檔

集成測試

版本: v1.13.1

查看文檔

檢視

版本: v1.13.1

查看文檔

Go 默認版本升級為 1.20

版本: v1.13.1

go 1.18 和 1.19 已停止維護,框架相應升級到 1.20,查看詳情。 如果想繼續使用 1.18 或 1.19,只需修改 go.mod 中的版本號,它們目前是完全兼容的。

任務調度支持橫向擴展

版本: v1.13.1

查看文檔

新增 debug 方法

版本: v1.13.1

查看文檔

make:controller 命令新增參數

版本: v1.13.1

make:controller 命令新增 --resource 參數,可以便捷的生成 CURD 結構:

go run . artisan make:controller --resource UserController

Response 新增 Status 方法

版本: v1.13.1

查看文檔

Orm 新增 Sum 和 Cursor 方法

版本: v1.13.1

查看文檔

Route 模塊支持配置驅動

版本: v1.13.1

將 Route 模塊原默認驅動 Gin 獨立成包,通過配置的方式注入到 Goravel 中。 本次優化後,為其他 HTTP 包注入到 Goravel 提供了便捷的通道,目前官方支持兩個 HTTP 包: 優化後,提供了一個便捷的通道來將其他 HTTP 包注入 Goravel,目前官方支持兩個 HTTP 包:

驅動鏈接
Ginhttps://github.com/goravel/gin
Fiberhttps://github.com/goravel/fiber

Request 新增 InputArray 和 InputMap 方法

版本: v1.13.1

查看文檔

Orm 模型支持自定義連接

版本: v1.13.1

查看文檔

Filesystem 模塊新增 Cloudinary 驅動

版本: v1.13.1

查看文檔

Log 新增鏈式方法

版本: v1.13.1

查看文檔

修復 facades.Auth().User() 的問題

版本: v1.13.1

  1. 修復使用 facades.Auth().User(ctx, &user) 方法時,如果 user 不存在不拋出錯誤的問題。

  2. 修復當主鍵非 int 類型時,無法找到 user 的問題;

修復自定義 .env 路由某些情況下不生效的問題

版本: v1.13.1

修復自定義.env路徑在某些情況下不會生效的問題。

修復 JWT 中設置 ttl == 0 時 token 立即過期的問題

版本: v1.13.1

預期當 ttl == 0 時,token 永不會過期。

修復 facades.Storage().Url() 在 windows 系統下路徑錯誤的問題

版本: v1.13.2

Issue #263

修復 Postgres 密碼為空時連接異常的問題

版本: v1.13.2

Issue #270

修復使用 Orm Cursor 方法時 With 方法無效的問題

版本: v1.13.2

Issue #253

服務啟動支持環境變量

版本: 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

DebugInfo 級別將不會在 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

基於 MIT 许可發佈