aah Data Validation
aah provides well integrated and seamless data validation feature for your application. It could be applied for URL Path Param, Form, JSON and XML.
- aah internally uses
gopkg.in/go-playground/validator.v9
as validator. It’s simple and effective validation library. Upcoming
planning to externalize the validation feature so that third-party libraries could be registered into aah.
Validation errors are well integrated with aah error handling mechanism.
Table of Contents
- Controller Action Parameters Validation
- How to Validate URL Query Parameters
- Adding Custom Validation Functions
Controller Action Parameters Validation
Action parameter validation applied on struct
for Form
, JSON
, XML
and any struct binding. Basically after successful bind on action parameter type struct
aah applies the validation.
Syntax
Basically you have to define Tag validate
with rules
for the struct fields. Refer to validator documentation.
// User contains user information
type User struct {
FirstName string `validate:"required"`
LastName string `validate:"required"`
Age uint8 `validate:"gte=0,lte=130"`
Email string `validate:"required,email"`
FavouriteColor string `validate:"iscolor"` // alias for 'hexcolor|rgb|rgba|hsl|hsla'
Addresses []*Address `validate:"required,dive,required"` // a person can have a home and cottage...
}
// Address houses a users address information
type Address struct {
Street string `validate:"required"`
City string `validate:"required"`
Planet string `validate:"required"`
Phone string `validate:"required"`
}
// Create method used to create an user.
func (c *UserController) Create(user *User) {
// Implementation goes here
}
// HandleError method called on any errors happens within the user controller.
// More info, read https://docs.aahframework.org/error-handling.html
func (c *UserController) HandleError(e *aah.Error) bool {
// handle error
return true
}
How to Validate URL Query Parameters
Tip: The best way to validate collective query parameters is to bind those values into struct
then aah automatically does validation on struct and gives a result.
Doing it manually for individual values on-demand basics.
Use method aah.App().ValidateValue(value, "rules")
. Refer to validator documentation
- It returns true if validation passed otherwise false.
For example -
i := 15
result := aah.App().ValidateValue(i, "gt=1,lt=10")
emailAddress := "sample@sample"
result := aah.App().ValidateValue(emailAddress, "email")
numbers := []int{23, 67, 87, 23, 90}
result := aah.App().ValidateValue(numbers, "unique")
color := "#e25657"
result := aah.App().ValidateValue(color, "iscolor") // alias for 'hexcolor|rgb|rgba|hsl|hsla'
Adding Custom Validation Functions
All capabilities provided by library gopkg.in/go-playground/validator.v9
to add custom validation function.
To obtain aah validator instance
validator := aah.App().Validator()
// Add your validation funcs
Note: The recommended spot/place to register custom validation functions is at <app-base-dir>/app/init.go
file.