Играть! Framework Form/HTML Helpers: разделение проблем?
Я только начал играть с Play 2.1.1, используя Scala. Просматривая некоторые учебные пособия / примеры приложений, я натолкнулся на вспомогательные методы, которые можно использовать для создания форм, например:
@(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))
}
Я обнаружил, что это удивительно, поскольку у меня возникает ощущение, что косвенность через объект Form кажется "не в том месте". То, что я ожидал, было что-то вроде этого (псевдо):
@(user: User)
@helper.form(action = routes.Application.submit) {
@helper.inputText(() => user.userName)
@helper.inputPassword(() => user.password)
}
... чтобы не нужно было определять объект Form внутри контроллера; все связанные с формой вещи будут расположены в шаблоне представления. Смешение логики "это будет визуализировано в форме" в контроллере кажется мне незначительным нарушением SOC.
Теперь я задаюсь вопросом: это просто так в Play, или я что-то упустил? Есть ли более приятный способ справиться с этим?
Ура, Алекс
1 ответ
Я думаю, что это будет раздражать слишком много определений форм в контроллере, особенно приложения будут включать много форм.
Но Play!Framework делает разработчика более гибким в написании кода. Вы можете смешивать простой HTML внутри помощника шаблона Scala следующим образом:
@helper.form(action = routes.Application.submit) {
<input type="text" name="username">
<input type="password" name="password">
....
}
На мой взгляд, помощник Scala на самом деле полезен с формой для обновления данных, которые были созданы ранее. Потому что это свяжет существующее значение с входным значением по умолчанию. И, кроме того, это также помогает отображать ошибку, вызванную проверкой объекта.
Если форма не считается предыдущим значением, как форма входа, я думаю, что использование простого ввода HTML будет лучше.