Skip to content

Upgrading To v1.14 From v1.13 ​

Exciting New Features 🎉 ​

Enhancements 🚀 ​

Breaking Changes 🛠 ​

v1.14.1 ​

v1.14.2 ​

v1.14.3 ​

Upgrade the related packages: goravel/gin: v1.2.2, goravel/fiber: v1.2.2

v1.14.4 ​

Upgrade the related packages: goravel/gin: v1.2.3

v1.14.5 ​

Upgrade the related packages: goravel/gin: v1.2.4, goravel/fiber: v1.2.3

v1.14.7 ​

Upgrade the related packages: goravel/gin: v1.2.5, goravel/fiber: v1.2.4

v1.14.8 ​

v1.14.9 ​

Upgrade Guide ​

Goravel v1.14 is developed and tested based on Golang 1.21, and generally compatible with other lower Golang versions. Please upgrade the framework step by step according to the content in this section.

Estimated Upgrade Time: 10 Minutes

1. Updating Dependencies ​

go get -u github.com/goravel/framework@v1.14.7

// If using gin
go get -u github.com/goravel/gin@v1.2.5

// If using fiber
go get -u github.com/goravel/fiber@v1.2.4

// If using redis
go get -u github.com/goravel/redis@v1.2.1

// If using s3
go get -u github.com/goravel/s3@v1.2.0

// If using oss
go get -u github.com/goravel/oss@v1.2.0

// If using cos
go get -u github.com/goravel/cos@v1.2.0

// If using minio
go get -u github.com/goravel/minio@v1.2.0

// If using cloudinay
go get -u github.com/goravel/cloudinary@v1.2.0

go mod tidy

2. Adding Configuration Items ​

  1. config/app.go adds localization module configuration items:
go
"locale": "en",
"fallback_locale": "en",
"providers": []foundation.ServiceProvider{
  ...
  &session.ServiceProvider{},
  &translation.ServiceProvider{},
  ...
}
  1. If you want to use the session feature, add the config/session.go file;

3. If using the Validation module ​

Confirm whether you are still trying to read the binding value even if the data validation fails. If so, you need to optimize the logic, because the value is empty after the upgrade. See: Validation will not bind data if validation fails.

4. If using the Testing module ​

Check whether using the Clear, Image methods, if so, need to modify accordingly: Add new methods and modify methods for Testing module

5. if using the Mail module ​

Check whether using the Queue method, if so, need to modify accordingly: Optimize the Queue method of Mail

6. If using the Auth module ​

Need to modify accordingly: Optimize the setting method of the Auth module ctx

7. If using the mock facades ​

Need to modify accordingly: Optimize the way of mock facades

8. If using the framework Orm model and returning data directly through the endpoint ​

Need to modify accordingly: Framework Orm model adds json tag

Feature Introduction ​

Localization ​

Version: v1.14.0

View Documentation

Installer ​

Version: v1.14.0

The installer allows you to easily download and initialize a new Goravel project.

View Documentation

Version: v1.14.0

View Request Documentation

View Response Documentation

Session ​

Version: v1.14.0

View Documentation

Support for setting body_limit and header_limit in Gin and Fiber drivers ​

Version: v1.14.0

HTTP drivers support setting body_limit to limit the body size, see: goravel/gin and goravel/fiber.

Log adds new methods ​

Version: v1.14.0

MethodDescrpton
StackUse multiple channels at the same time
ChannelSpecified a channel
WithTracePrint trace

View Documentation

Orm adds new methods ​

Version: v1.14.0

Add WhereIn, OrWhereIn, OrWhereNotIn, WhereNotIn, WhereBetween, WhereNotBetween, WhereNull, OrWhereNull, OrderByDesc, OrderBy, InRandomOrder, Exists methods.

Console adds new methods ​

Version: v1.14.0

View Documentation

Response adds new methods ​

Version: v1.14.0

View documentation

Add Build command ​

Version: v1.14.0

The Goravel project can be compiled with the following command: go run . artisan build.

View Documentation

Add helper methods ​

Version: v1.14.0

Redis driver supports TLS ​

Version: v1.14.0

View Documentation

Validation will not bind data if validation fails ​

Version: v1.14.0

Previously, when calling the methods below, the userRequest still bound the value, even if an error was returned. After the upgrade, it will no longer bind.

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

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

Add new methods and modify methods for Testing module ​

Version: v1.14.0

  1. Add Fresh method;
  2. Modify Clear method to Stop method;
  3. The Image method adds ExposedPorts variable and remove Timeout variable;
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"},
})

Optimize the Queue method of Mail ​

Version: v1.14.0

The input parameter of the Queue method changes from queue *mail.Queue to queue ...mail.Queue.

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

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

Optimize the setting method of the Auth module ctx ​

Version: v1.14.0

Previously, when calling the Parse, User, Login, LoginUsingID, Refresh, Logout methods, you need to pass ctx. After the upgrade, you no longer need to pass ctx, you can directly set it in 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()

Optimize the way of mock facades ​

Version: 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()

Framework Orm model adds json tag ​

Version: v1.14.0

If you are using the framework's Orm model and returning data directly through the endpoint, you need to create a new model according to the old and replace the old, or frontend needs to modify the field name according to the json tag.

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

Fix the session is not set successfully in the gin driver ​

goravel/framework: v1.14.1

Fix the language file cannot be read in the localization module ​

goravel/framework: v1.14.1

Fix Validation verification of image and file failed ​

goravel/framework: v1.14.2

goravel/gin: v1.2.2

goravel/fiber: v1.2.2

Issue #450

goravel/gin: v1.2.2

Fix Validation cannot bind slice ​

goravel/framework: v1.14.3

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

Validation supports bind carbon ​

goravel/framework: v1.14.3

go
// Define carbon field
type User struct {
	Date   carbon.Carbon `form:"date" json:"date"`
}
var user requests.User

// Use ValidateRequest bind data
errors, err := ctx.Request().ValidateRequest(&user)

// or use Validate bind data
validator, err := ctx.Request().Validate(map[string]string{
  "date": "required|date",
})
err := validator.Bind(&user)

// get date time
user.Date.ToDateTimeString()

Fix Session concurrent problem ​

goravel/framework: v1.14.4

当 Session 并发过高时,可能会出现 Session 读写冲突的问题。

Fix Gin sets Session same_site invalid ​

goravel/gin: v1.2.3

Issue #455

Add Shutdown method for Route ​

goravel/framework: v1.14.5

goravel/gin: v1.2.4

goravel/fiber: v1.2.3

查看文档

Optimize the ctx.WithValue method of HTTP ​

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")

Fix the problem of conflicting listener registration ​

goravel/framework: v1.14.8

Multiple events use the same listener, a listener conflict will be prompted when registering.

Issue #523

Fix the problem of custom Log driver console repeatedly printing ​

goravel/framework: v1.14.9

Issue #531

Fix the problem of data binding error when HTTP JSON Request contains multi-level structure ​

goravel/framework: v1.14.9

Issue #533

Released under the MIT License