L'éditeur php Yuzai a découvert que la vérification des données peut être facilement réalisée à l'aide de la bibliothèque de vérification ozzo, mais vous pouvez parfois rencontrer des situations où vous devez appeler la méthode de vérification de la structure intégrée. Cependant, le principe de conception de la bibliothèque de validation ozzo est d'éviter d'appeler des méthodes de validation intégrées dans des structures pour garantir la simplicité et la lisibilité du code. En effet, la méthode de vérification intégrée à la structure peut compliquer la logique de vérification et augmenter la difficulté de maintenance du code. Par conséquent, lorsque nous utilisons la bibliothèque de vérification ozzo, nous devons suivre ce principe et choisir une méthode de vérification appropriée pour garder le code clair et facile à maintenir.
J'utilise "github.com/go-ozzo/ozzo-validation/v4"
.
Voici mes structures :
type mystruct struct { uuid string `json:"uuid"` firstuuid string `json:"first_uuid"` seconduuid string `json:"second_uuid"` thirduuid string `json:"third_uuid"` phonenumber string `json:"phone_number"` email string `json:"email"` skypeid string `json:"skype_id"` } type myotherstruct struct { mystruct city string `json:"city"` comment string `json:"comment"` personnelid string `json:"personnel_id"` firstdate string `json:"first_date"` seconddate string `json:"second_date"` firstboolean bool `json:"first_boolean"` secondboolean bool `json:"second_boolean"` }
Voici les méthodes de vérification :
func (m mystruct) validate() error { fmt.println("calling mystruct validator") err := validation.validatestruct( validation.field(&uui.uuid, is.uuid), validation.field(&uui.firstuuid, validation.required, is.uuid), validation.field(&uui.seconduuid, validation.required, is.uuid), validation.field(&uui.thirduuid, validation.required, is.uuid), validation.field(&uui.email, validation.required, is.email), validation.field(&uui.phonenumber, validation.required, validation.match(mobileregexp)), validation.field(&uui.skypeid, validation.required), ) return err } func (m myotherstruct) validate() error { fmt.println("calling myotherstruct validator") err := validation.validatestruct( validation.field(&uui.personnelid, validation.match(personnelidregexp)), validation.field(&uui.city, validation.required), validation.field(&uui.comment), validation.field(&uui.firstdate, validation.date(time.dateonly)), validation.field(&uui.seconddate, validation.date(time.dateonly)), ) return err }
Voici la demande que j'ai envoyée :
{ "uuid": "1e57ef49-352f-4545-a43a-b51cad6c5a0a", "phone_number": "09124567891", "email": "[email protected]", "skype_id": "some_skype_id", "city": "a city", "personnel_id": "", "comment": "no comment for now!", "first_date": "", "second_date": "", "first_uuid": "94038913-2bdb-4dde-99fb-640a24e1c003", "second_uuid": "7fa0e242-841b-4de0-a3ce-e2b54ecd1bca", "third_uuid": "35ab6711-852e-42c8-aab3-dfb901a845f5", "first_boolean": true, "second_boolean": false }
Je veux appeler func (m mystruct) validate()
pour ce problème, mais je ne reçois pas le journal appelant myotherstruct validateur
. func (m mystruct) validate()
,但我没有收到日志 calling myotherstruct validator
。
问题中的源代码与ozzo 验证 v4 返回在结构中找不到字段 #0。除此之外,您应该将以下代码添加到 (myotherstruct).validate
Le code source dans la question avec ozzo validation v4 renvoie le champ n°0 introuvable dans la structure. En plus de cela, vous devez ajouter le code suivant à (myotherstruct).validate
:
validation.field(&m.mystruct),
Essayez cette démo ((mystruct).validate
,则 (myotherstruct).validate
不会被调用,因为前者对 myotherstruct
https://www.php.cn/link/9f29450d2eb58feb555078bdefe28aa5
package main import ( "fmt" validation "github.com/go-ozzo/ozzo-validation/v4" "github.com/go-ozzo/ozzo-validation/v4/is" ) type MyStruct struct { UUID string `json:"uuid"` Email string `json:"email"` } func (m MyStruct) Validate() error { fmt.Println("calling MyStruct validator") err := validation.ValidateStruct( &m, validation.Field(&m.UUID, is.UUID), validation.Field(&m.Email, validation.Required, is.Email), ) return err } type MyOtherStruct struct { MyStruct City string `json:"city"` } func (m MyOtherStruct) Validate() error { fmt.Println("calling MyOtherStruct validator") err := validation.ValidateStruct( &m, validation.Field(&m.City, validation.Required), // The following line is necessary to make (MyStruct).Validate being called. validation.Field(&m.MyStruct), ) return err } func main() { data := MyOtherStruct{} fmt.Printf("validation error: %v\n", data.Validate()) }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!