2017-07-06 13 views
0

Golang ozzo-validationでは、別のフィールドに依存するフィールドを検証するにはどうすればよいですか?私が持っている場合たとえばgolangでozzo検証を使用して条件付き必須検証を実行するにはどうすればよいですか?

、以下:

return validation.ValidateStruct(&c, 
     validation.Field(&c.Name, validation.Required, validation.Length(5, 20)), 

     validation.Field(&c.Gender, validation.In("Female", "Male")), 

     validation.Field(&c.Email, is.Email), 

     validation.Field(&c.Address), 

は、どのように私は住所、電子メールが空でない場合にのみ必要であることの検証を追加することができますか?

答えて

1

次の2つのways-

フィールドルールを作成しながら、条件付きで、その後 validation.ValidateStruct に供給する前提値すなわちチェック Emailに基づいて FieldRulesを追加
  • custom rules
  • 、独自の追加
    • でそれを達成することができます

      例:

      type Sample struct { 
          Name string 
          Gender string 
          Email string 
          Address Address 
      } 
      
      type Address struct { 
          // ... fields 
      } 
      
      func (s Sample) Validate() error { 
          var fieldRules []*validation.FieldRules 
      
          fieldRules = append(fieldRules, validation.Field(&s.Name, validation.Required, validation.Length(5, 20))) 
          fieldRules = append(fieldRules, validation.Field(&s.Gender, validation.In("Female", "Male"))) 
          fieldRules = append(fieldRules, validation.Field(&s.Email, is.Email)) 
      
          if len(strings.TrimSpace(s.Email)) > 0 { 
           fieldRules = append(fieldRules, validation.Field(&s.Address, validation.Required)) 
           fieldRules = append(fieldRules, validation.Field(&s.Address)) 
          } 
      
          return validation.ValidateStruct(&s, fieldRules...) 
      } 
      
    +0

    私はすでにカスタムルールのセクションを確認しました。カスタムルールを記述しても、フィールドxyzに固有の 'validation.Validate( "xyz"、validation.By(checkAbc))'コードで使用する必要があります。 – Crusaderpyro

    +0

    もう一度試してみることができますか? – jeevatkm

    +0

    どうすればうまくいくはずですか? – Crusaderpyro

    関連する問題