Heim >Backend-Entwicklung >Golang >Bei der Validierung mit ozzo wird nicht die Validierungsmethode der eingebetteten Struktur aufgerufen
php-Editor Yuzai stellte fest, dass die Datenüberprüfung mithilfe der Ozzo-Überprüfungsbibliothek leicht durchgeführt werden kann. Manchmal kann es jedoch vorkommen, dass Sie die Überprüfungsmethode der eingebetteten Struktur aufrufen müssen. Das Designprinzip der Ozzo-Validierungsbibliothek besteht jedoch darin, den Aufruf von in Strukturen eingebetteten Validierungsmethoden zu vermeiden, um die Einfachheit und Lesbarkeit des Codes sicherzustellen. Dies liegt daran, dass die in die Struktur eingebettete Verifizierungsmethode die Verifizierungslogik komplizieren und die Codewartung erschweren kann. Daher sollten wir bei der Verwendung der Ozzo-Verifizierungsbibliothek diesem Prinzip folgen und eine geeignete Verifizierungsmethode auswählen, um den Code klar und leicht zu warten zu halten.
Ich verwende "github.com/go-ozzo/ozzo-validation/v4"
.
Das sind meine Strukturen:
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"` }
Dies sind die Verifizierungsmethoden:
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 }
Das ist die Anfrage, die ich gesendet habe:
{ "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 }
Ich möchte func (m mystruct)validate()
für dieses Problem aufrufen, aber ich erhalte nicht das Protokoll calling myotherstruct validator
. func (m mystruct) validate()
,但我没有收到日志 calling myotherstruct validator
。
问题中的源代码与ozzo 验证 v4 返回在结构中找不到字段 #0。除此之外,您应该将以下代码添加到 (myotherstruct).validate
Der Quellcode in der Frage mit ozzo validation v4 gibt Feld Nr. 0 zurück, das nicht in der Struktur gefunden wurde. Darüber hinaus sollten Sie den folgenden Code zu (myotherstruct).validate
hinzufügen:
validation.field(&m.mystruct),
Probieren Sie diese Demo aus ((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()) }🎜Bitte beachten Sie, dass Sie nichts wissen, wenn Sie anrufen 🎜. 🎜
Das obige ist der detaillierte Inhalt vonBei der Validierung mit ozzo wird nicht die Validierungsmethode der eingebetteten Struktur aufgerufen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!