2016-01-23 168 views
1

我试图做验证我的形式结构在返回一个布尔值的方法,但是如果你对Validate方法的尽头,回首我不断收到即使它应该返回true假..为什么我的结构方法总是返回false?

,你会看到我写了validated := len(this.Errors) == 0,根据错误地图是否有项目,应该使“验证”为真或假,然后我return validated

当我准确地填写表格时,应该没有错误,但当我应该成为真实时,我仍然会错误。

有人可以解释一下吗?这不是Go的工作原理吗?

form.go:

package models 

import (
    "../config" 
    "../util" 
) 

type Form struct { 
    Name string 
    Email string 
    Phone string 
    Message string 
    Thanks string 
    ErrorHandler 
} 

func (this *Form) Validate() bool { 
    this.Errors = make(map[string]string) 

    matched := util.MatchRegexp("[email protected]+\\..+", this.Email) 

    if !util.IsEmpty(this.Email) { 
     if matched == false { 
      this.Errors["Email"] = config.EMAIL_INVALID 
     } 
    } else { 
     this.Errors["Email"] = config.EMAIL_EMPTY 
    } 

    if util.IsEmpty(this.Name) { 
     this.Errors["Name"] = config.NAME_EMPTY 
    } 

    if util.IsEmpty(this.Phone) { 
     this.Errors["Phone"] = config.PHONE_EMPTY 
    } 

    if util.IsEmpty(this.Message) { 
     this.Errors["Message"] = config.MESSAGE_EMPTY 
    } 

    validated := len(this.Errors) == 0 

    if validated { 
     this.Thanks = config.THANK_YOU 
    } 

    return validated 
} 

errorhandler.go:

package models 

type ErrorHandler struct { 
    Errors map[string]string 
} 

func (this *ErrorHandler) HandleErr(err string) { 
    this.Errors = make(map[string]string) 
    this.Errors["Error"] = err 
} 

而这正是我试图调用Validate方法 - 在我的控制器的功能:

form := &models.Form{ 
    Name: r.FormValue("name"), 
    Email: r.FormValue("email"), 
    Phone: r.FormValue("phone"), 
    Message: r.FormValue("message")} 

if form.Validate() { 
    // This never runs because 'form.Validate()' is always false 
} 

我不认为util.IsEmpty()是这里的罪魁祸首..只是检查,如果字符串为空:

func IsEmpty(str string) bool { 
    return strings.TrimSpace(str) == "" 
} 

任何帮助,将不胜感激!

+1

你可以在调用'validate'之前添加'log.Printf(“form:%v”,form)''吗? – Philip

+0

嗯..我看到当我没有输入任何东西时,它会打印出“form:&{{map []}} map [blah:blah,etc ...] ......并且它会打印同样的东西输入信息所以它不能从HTML发送它然后... – Lansana

+1

Ahhhhh我忘记了输入字段的名称属性初学者的错误谢谢你应该添加一个答案,我可以接受它 – Lansana

回答

1

这是最好的调试这样的问题,像一个日志声明:

log.Printf("form: %v", form)

调用validate之前,所以这是清楚的输入数据的模样。

问候,菲利普