直接解析到 struct

若是要把表單裏的內容賦值到一個 struct 裏,除了用上面的方法一個一個獲取再賦值外,beego 提供了經過另一個更便捷的方式,就是經過 struct 的字段名或 tag 與表單字段對應直接解析到 struct。this

定義struct:指針

type user struct {
    Id    int         `form:"-"`
    Name  interface{} `form:"username"`
    Age   int         `form:"age"`
    Email string
}

表單:code

<form id="user">
    名字:<input name="username" type="text" />
    年齡:<input name="age" type="text" />
    郵箱:<input name="Email" type="text" />
    <input type="submit" value="提交" />
</form>

Controller 裏解析:orm

func (this *MainController) Post() {
    u := user{}
    if err := this.ParseForm(&u); err != nil {
        //handle error
    }
}

注意:input

  • 表單裏的name值必須和struct -> form值大小寫保持一致(LZ在這裏遇到了坑) 
  • 定義 struct 時,字段名後若是有 form 這個 tag,則會以把 form 表單裏的 name 和 tag 的名稱同樣的字段賦值給這個字段,不然就會把 form 表單裏與字段名同樣的表單內容賦值給這個字段。如上面例子中,會把表單中的 username 和 age 分別賦值給 user 裏的 Name 和 Age 字段,而 Email 裏的內容則會賦給 Email 這個字段。
  • 調用 Controller ParseForm 這個方法的時候,傳入的參數必須爲一個 struct 的指針,不然對 struct 的賦值不會成功並返回 xx must be a struct pointer 的錯誤。
  • 若是要忽略一個字段,有兩種辦法,一是:字段名小寫開頭,二是:form 標籤的值設置爲 -
相關文章
相關標籤/搜索