我剛開始使用Scala玩Play 2.1.1。通過一些教程/示例應用程序走,我穿過輔助方法,可以用來創建表單,例如:玩!框架表單/ HTML助手:分離問題?
@(myForm: Form[User])
@helper.form(action = routes.Application.submit) {
@helper.inputText(myForm("username"))
@helper.inputPassword(myForm("password"))
}
來到我仍然是一個的n00b這一點。但據我瞭解,這基本上需要一個表單對象控制器,其「包裝」的模式(簡體)中被定義爲:
val loginForm = Form(
tuple(
"email" -> text,
"password" -> text
))
)
def login = Action { implicit request =>
Ok(html.login(loginForm))
}
我發現這suprising,因爲我得到的感覺是間接通過Form對象似乎「在錯誤的地方」。我期待的是這樣的(僞):
@(user: User)
@helper.form(action = routes.Application.submit) {
@helper.inputText(() => user.userName)
@helper.inputPassword(() => user.password)
}
...所以一個人不必在控制器中定義Form對象;所有與表單相關的東西都將位於視圖模板中。 將「這種將被呈現的表單」邏輯混合到控制器中似乎對我來說是一個輕微的SOC侵犯。
現在我想知道:這是玩遊戲的方式,還是我錯過了什麼?有沒有更好的方法來處理這個問題?
乾杯,亞歷克斯
我最終按照你的建議,並使用「普通」的HTML來創建我的表單。然而,在編碼過程中,我得到的印象是關鍵問題並不是真正的形式助手,而是如何完成對路線的反向查找。使用POST參數時可能會很棘手......我想在使用「form-in-controller」方法(它使POST參數解析更容易,但在控制器中引入一些「異味」)和手動解析POST參數從請求(這是更多的「樣板」,但不需要表單的東西)。 – 2013-04-10 14:12:02
@ alexander.biskop爲了跟進,我不同意控制器中的「表單」增加了氣味。表格不僅僅是視圖的一部分。首先,來自該表單的數據被重新發布,並且_somehow_控制器必須知道它如何與其接收的數據進行交互。其次,表單可以與驗證邏輯和與視圖相關的其他事物相結合。這裏的關鍵在於你在控制器中訪問的「表單」根本與表示無關(因此,這些問題實際上很好地分離了) – 2013-07-18 01:32:16