使用Play框架设置路由器时我做错了什么

时间:2018-11-30 13:21:06

标签: scala playframework playframework-evolutions

我是Play和Scala(2.6版)的新手,我不知道如何使路由以简单的方式工作。我整理了2.6文档中的示例,我设法创建了一个自定义应用程序加载器,据我了解,这是执行Evolution迁移所必需的。我发现的示例包括一个var路由器= Routes.empty BuiltInComponentsFromContext似乎要求使用路由器,但这样做的话,我的路由现在断开了,现在得到的都是“ Action Not找到”消息。

这是我的application.conf:

Invalid query param layer

这是应用程序加载器

play.application.loader=MyApplicationLoader
router = my.application.Router

通过声明,在我看来:

import play.api.ApplicationLoader
import play.api.ApplicationLoader.Context
import play.api.BuiltInComponentsFromContext
import play.api.db.{Database, DBComponents, HikariCPComponents}
import play.api.db.evolutions.EvolutionsComponents
import play.api.routing.Router
import play.filters.HttpFiltersComponents
//import com.softwaremill.macwire._

class MyApplicationLoader extends ApplicationLoader {
  def load(context: Context) = {
    new MyComponents(context).application
  }
}

class MyComponents(cntx: Context)
  extends BuiltInComponentsFromContext(cntx)
    with DBComponents
    with EvolutionsComponents
    with HikariCPComponents
    with HttpFiltersComponents
{
  // this will actually run the database migrations on startup
  //lazy val router = Router.empty
  val router = Router.empty
  applicationEvolutions
}

我实际上是使我在conf / routes文件中声明的任何路由无效,并且使用Router.load方法对我来说似乎是偶然的,但是我找不到如何传递必需的示例。方法的环境和配置值。假设我不想使用静态路由,该怎么做?

1 个答案:

答案 0 :(得分:1)

假设仅出于Evolution的目的而使用编译时依赖项注入(因为否则,您之前会遇到相同的问题),答案是您不必这样做。 Evolution也可以使用默认的动态依赖项注入。 The part of the documentation您可能基于以下假设而得出结论: 如果 您已经 已经 使用了以下编译-时间依赖注入,这是如何对其进行修改以使演化起作用。如果查看EvolutionsModule的源代码,可能会发现ApplicationEvolutions已绑定eagerly。这意味着将在应用程序初始化期间在应用程序启动时创建ApplicationEvolutions的实例。在ApplicationEvolutions本身的源代码中,您可以看到start()是从构造函数中调用的。因此,如果您提供了配置,其余的应该可以独立工作。