5

我对输入数据进行了一些验证,我真的希望在控制器代码中处理这些数据,因为:

  1. 它仅适用于非常特定的情况,因此verifying在表单定义中使函数混乱会降低代码凝聚力。
  2. 它产生了我需要在控制器的其他地方使用的附带结果。

什么是一种干净的方式来产生一个新的,就像刚刚在 的分支中Form绑定了一个额外的(字段或一般)错误消息?successForm.fold

为了说明,我想要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 ...
      }
  }
4

2 回答 2

5

自己找到的:

val f= Form(form.mapping, form.data, 
  Seq(new play.api.data.FormError("error.key", "my error")), form.value)

为噪音道歉——把它留在这里,以防其他人像我一样被卡住。

于 2012-10-19T13:42:26.830 回答
2

较短的替代方案:

val f= form.withError("error.key", "my error")), form.value)

于 2013-09-12T14:05:26.947 回答