Upgrading To v1.14 From v1.13
Exciting New Features ๐
Enhancements ๐
- Support for setting body_limit and header_limit in Gin and Fiber drivers
- Log adds new methods
- Orm adds new methods
- Console adds new methods
- Response adds new methods
- Add Build command
- Add helper methods
- Redis driver supports TLS
Breaking Changes ๐
- Validation will not bind data if validation fails
- Add new methods and modify methods for Testing module
- Optimize the Queue method of Mail
- Optimize the setting method of the Auth module ctx
- Optimize the way of mock facades
- Framework Orm model adds json tag
v1.14.1
- Fix the session is not set successfully in the gin driver
- Fix the language file cannot be read in the localization module
v1.14.2
- Fix Validation verification of image and file failed
- Fix the cookie Expires set by the goravel/gin driver is invalid
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
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
config/app.go
adds localization module configuration items:
"locale": "en",
"fallback_locale": "en",
"providers": []foundation.ServiceProvider{
...
&session.ServiceProvider{},
&translation.ServiceProvider{},
...
}
- 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
Installer
Version: v1.14.0
The installer allows you to easily download and initialize a new Goravel project.
Cookie
Version: v1.14.0
Session
Version: v1.14.0
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
Method | Descrpton |
---|---|
Stack | Use multiple channels at the same time |
Channel | Specified a channel |
WithTrace | Print trace |
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
Response adds new methods
Version: v1.14.0
Add Build command
Version: v1.14.0
The Goravel project can be compiled with the following command: go run . artisan build
.
Add helper methods
Version: v1.14.0
Redis driver supports TLS
Version: v1.14.0
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.
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
- Add Fresh method;
- Modify
Clear
method to Stop method; - The
Image
method addsExposedPorts
variable and removeTimeout
variable;
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
.
-- 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)
.
-- 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
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.
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
Fix the cookie Expires set by the goravel/gin driver is invalid
goravel/gin: v1.2.2
Fix Validation cannot bind slice
goravel/framework: v1.14.3
type User struct {
Tags []string `form:"tags" json:"tags"`
}
Validation supports bind carbon
goravel/framework: v1.14.3
// 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
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.
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.