Maison > développement back-end > Golang > le corps du texte

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

王林
Libérer: 2024-02-11 11:00:09
avant
585 Les gens l'ont consulté

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"`
}
Copier après la connexion

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
}
Copier après la connexion

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
}
Copier après la connexion

J'obtiens cette erreur :

field #0 cannot be found in the struct
Copier après la connexion

Solution

validatestruct Le premier paramètre est structptr :

func validatestruct(structptr interface{}, fields ...*fieldrules) error
Copier après la connexion

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
}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!