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) == ""
}
任何幫助,將不勝感激!
你可以在調用'validate'之前添加'log.Printf(「form:%v」,form)''嗎? – Philip
嗯..我看到當我沒有輸入任何東西時,它會打印出「form:&{{map []}} map [blah:blah,etc ...] ......並且它會打印同樣的東西輸入信息所以它不能從HTML發送它然後... – Lansana
Ahhhhh我忘記了輸入字段的名稱屬性初學者的錯誤謝謝你應該添加一個答案,我可以接受它 – Lansana