Heim >Backend-Entwicklung >Golang >Die Ozzo-Validierung v4 gibt Feld Nr. 0 zurück, das in der Struktur nicht gefunden wurde

Die Ozzo-Validierung v4 gibt Feld Nr. 0 zurück, das in der Struktur nicht gefunden wurde

王林
王林nach vorne
2024-02-11 11:00:09633Durchsuche

ozzo 验证 v4 返回在结构中找不到字段 #0

Wenn Sie die Ozzo-Validierung v4 in PHP verwenden, kann es zu einer häufigen Fehlermeldung kommen: „Ozzo-Validierung v4 hat das zurückgegebene Feld #0 nicht in der Struktur gefunden“. Diese Fehlermeldung weist darauf hin, dass der Validator das angegebene Feld in der Datenstruktur nicht finden kann. Dies kann durch falsche Feldnamen, nicht übereinstimmende Datenstrukturen oder falsch festgelegte Validierungsregeln verursacht werden. Bevor wir dieses Problem lösen, müssen wir den Code und die Validierungsregeln noch einmal überprüfen, um sicherzustellen, dass die Feldnamen korrekt angegeben sind und mit der Datenstruktur übereinstimmen. Durch sorgfältige Fehlerbehebung und Fehlerbehebung können wir dieses Problem leicht beheben und dafür sorgen, dass der Code reibungslos läuft.

Frageninhalt

Ich verwende "github.com/go-ozzo/ozzo-validation/v4". Das ist meine Struktur:

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"`
    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 ist die Verifizierungsmethode:

func (m mystruct) validate() error {
    err := validation.validatestruct(
        validation.field(&uui.personnelid, validation.match(personnelidregexp)),
        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.city, validation.required),
        validation.field(&uui.comment),
        validation.field(&uui.skypeid, validation.required),
        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 erhalte diese Fehlermeldung:

field #0 cannot be found in the struct

Solution

validatestruct Der erste Parameter ist structptr:

func validatestruct(structptr interface{}, fields ...*fieldrules) error

Dieser Parameter fehlt in Ihrem Code. Leider kann der Compiler solche Fehler nicht abfangen.

Dies ist die korrigierte Implementierung (bitte beachten, uui 也应该是 m):

func (m MyStruct) Validate() error {
    err := validation.ValidateStruct(
        &m,  // <== The first parameter is a pointer to the struct.
        validation.Field(&m.PersonnelID, validation.Match(personnelIDRegexp)),
        validation.Field(&m.UUID, is.UUID),
        validation.Field(&m.FirstUUID, validation.Required, is.UUID),
        validation.Field(&m.SecondUUID, validation.Required, is.UUID),
        validation.Field(&m.ThirdUUID, validation.Required, is.UUID),
        validation.Field(&m.Email, validation.Required, is.Email),
        validation.Field(&m.PhoneNumber, validation.Required, validation.Match(mobileRegexp)),
        validation.Field(&m.City, validation.Required),
        validation.Field(&m.Comment),
        validation.Field(&m.SkypeID, validation.Required),
        validation.Field(&m.FirstDate, validation.Date(time.DateOnly)),
        validation.Field(&m.SecondDate, validation.Date(time.DateOnly)),
    )

    return err
}

Das obige ist der detaillierte Inhalt vonDie Ozzo-Validierung v4 gibt Feld Nr. 0 zurück, das in der Struktur nicht gefunden wurde. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen