Maison >développement back-end >Golang >ozzo validation v4 renvoie le champ #0 introuvable dans la structure

ozzo validation v4 renvoie le champ #0 introuvable dans la structure

王林
王林avant
2024-02-11 11:00:09634parcourir

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

Lors de l'utilisation de la validation Ozzo v4 en php, vous pouvez rencontrer un message d'erreur courant : "la validation ozzo v4 a renvoyé le champ #0 introuvable dans la structure". Ce message d'erreur indique que le validateur ne trouve pas le champ spécifié dans la structure de données. Cela peut être dû à des noms de champs incorrects, à des structures de données incompatibles ou à des règles de validation mal définies. Avant de résoudre ce problème, nous devons revérifier le code et les règles de validation pour nous assurer que les noms de champs sont correctement spécifiés et correspondent à la structure des données. Avec un dépannage et un débogage minutieux, nous pouvons facilement résoudre ce problème et faire fonctionner le code sans problème.

Contenu de la question

J'utilise "github.com/go-ozzo/ozzo-validation/v4". Voici ma structure :

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"`
}

Voici la méthode de vérification :

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
}

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
}

J'obtiens cette erreur :

field #0 cannot be found in the struct

Solution

validatestruct Le premier paramètre est structptr :

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

Ce paramètre est absent de votre code. Malheureusement, le compilateur ne peut pas détecter de telles erreurs.

Voici l'implémentation corrigée (veuillez noter 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
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer