玩2 scala:在控制器代码中向窗体添加错误

玩2 scala:在控制器代码中向窗体添加错误,scala,validation,playframework-2.0,Scala,Validation,Playframework 2.0,我确实希望在控制器代码中处理一些输入数据,因为: 它只适用于非常特定的情况,因此在表单定义中混淆验证函数会降低代码的内聚性 它产生我需要在控制器的其他地方使用的附带结果 生成新的表单的干净方式表单是什么,就像刚刚在表单的成功分支中绑定了附加(字段或常规)错误消息的表单。折叠 为了说明这一点,我希望使用(不存在的)Form.withError方法: val form= myForm.bindFromRequest form.fold( errors => BadRequest(view(

我确实希望在控制器代码中处理一些输入数据,因为:

  • 它只适用于非常特定的情况,因此在表单定义中混淆
    验证
    函数会降低代码的内聚性
  • 它产生我需要在控制器的其他地方使用的附带结果
  • 生成新的
    表单
    的干净方式表单是什么,就像刚刚在
    表单的
    成功
    分支中绑定了附加(字段或常规)错误消息的表单。折叠

    为了说明这一点,我希望使用(不存在的)
    Form.withError
    方法:

    val form= myForm.bindFromRequest
    form.fold(
      errors => BadRequest(view(errors))
      {
        case(data, button) =>
          button match {
            case Some("save") =>
              val r= costlyFunction(data)
              if (r.isOk) {
                doSomethingWith(r)
                Ok(...)
              }
              else {
                val f= form.withError("my custom error")
                BadRequest(view(f))
              }
            case ...
          }
      }
    
    我自己发现的:

    val f= Form(form.mapping, form.data, 
      Seq(new play.api.data.FormError("error.key", "my error")), form.value)
    
    为噪音道歉——把它留在这里,以防其他人像我一样被卡住。

    更简短的选择:

    
    val f=form.withError(“error.key”、“my error”)),form.value)
    

    略短:form.copy(errors=form.errors:+newformerror(“error.key”、“我的错误”)