【问题标题】:Generic routing parameter for Play framework?Play框架的通用路由参数?
【发布时间】:2014-02-27 01:36:05
【问题描述】:

我希望使用 Scala/Play 进行一些原型/探索性类型的工作,并且我希望避免每次向控制器添加操作时都必须更新我的路线。

是否有我可以使用的速记/模糊(如果有,它是什么?)它会告诉 Play 继续并路由到所有给定的(事先不知道的)控制器和动作集?

【问题讨论】:

  • 据我所知没有。在路由文件中添加一行真的那么难吗?如果您不逐步添加它们,请提前使用方法存根(如def someControllerFunction(param: String, param2: String ....) = TODO)定义您的操作。这样你就可以提前定义你的路由,然后再填写控制器函数。
  • 从哲学上讲,这是在浪费我的时间。这可能会发生数百次,甚至数千次,这是在浪费我的时间。生命诚可贵。我不想浪费我的生命来编写我不需要的代码行:) 实际上 - 这是大多数路由系统的常见且基本的功能。我很惊讶 play 没有它
  • 反思似乎是目前唯一的方法。你有能力做到这一点吗?我现在正在编写代码以使其与反射一起工作。这应该对 scala 有帮助 stackoverflow.com/a/1470190/5967859 完成后会发布答案。

标签: scala playframework-2.0


【解决方案1】:
edit(editType: String) = Action {
implicit request =>
    editType match {
      case "name" =>
        try {
              Ok(views.html.editNamePage())

        } catch {
          case e: Exception =>
            Ok(views.html.errorPage())
        }
      case "saveName" =>
        try {
                Ok("saveFullName")
        } catch {
          case e: Exception =>
            Ok("0")
        }

      case "email" =>
        try {
          Ok(views.html.editEmailpage("result"))
        } catch {
          case e: Exception =>
            Ok(views.html.errorPage())
        }
      case "saveEmail" =>
        try {
              Ok("success")
        } catch {
          case e: Exception =>
            Ok("0")
        }
      case "removeEmail" =>
        try {
            Ok("success")
        } catch {
          case e: Exception =>
            Ok("0")
        }
      }
       }

路线

POST   /edit             controllers.ControllerName.edit(editType:String)

您可以在控制器方法上使用模式匹配。通过这种方式,您可以为不同的目的多次使用单个根。它减少了您的路线数量

【讨论】:

  • 好的,所以我没有将其添加到路由中,而是将其添加到控制器;不仅如此,我还在编写更多行、更复杂的代码。我一直在阅读-也许有办法用正则表达式做到这一点?但我看不到如何指定通配符目标
  • 请永远不要这样做。上面的代码会导致匹配错误,非常冗长,不可读,并且完全滥用了 scala 语言。足够多的匹配/案例也可能会导致堆栈溢出。
猜你喜欢
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 2014-01-17
  • 1970-01-01
相关资源
最近更新 更多