我是Play框架的新手,并且已经过了samples,在computer-database
示例中,我发现了以下不完全理解的表单定义。
此处Computer.apply
和Computer.unapply
的作用是什么?
val computerForm = Form(
mapping(
"id" -> ignored(NotAssigned:Pk[Long]),
"name" -> nonEmptyText,
"introduced" -> optional(date("yyyy-MM-dd")),
"discontinued" -> optional(date("yyyy-MM-dd")),
"company" -> optional(longNumber)
)(Computer.apply)(Computer.unapply)
)
(来自controllers/Application.scala
)
编辑:这似乎是一个很好的资源:https://groups.google.com/forum/?fromgroups=#!topic/play-framework/dxNQ8E81YJs但仍然不确定我是否完全了解。
答案 0 :(得分:5)
您应该了解Scala上下文中应用/取消应用的内容,因为它不是特定于Play2 /表单。
在apply方法中,我们获取所需的参数并返回新的参数 我们感兴趣的类的实例在我们反向的位置 unapply-我们采取实例并提取所需的信息 并以元组的形式返回它们。
简而言之:apply
用于从参数构造Computer对象。 unapply
用于相反的情况,从Computer对象中提取参数。
答案 1 :(得分:4)
当您想要将表单绑定到案例类的字段(在本例中为Computer
)时,这是Play中的常见模式。
mapping
方法允许您提供构造和解构函数,这些函数将被调用以填充表单并从中提取数据。
由于您要转到/来自Computer
,因此您需要一种方法可以从参数中创建Computer
,并且需要从Computer
中提取参数的方法,而这正是{ {1}}和Computer.apply
。
相关示例:Play documentation on forms中的映射示例。