Играть! 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 будет лучше.

Другие вопросы по тегам