我刚开始使用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