Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Play 2.0应用程序和使用的插件都有;“全球”;对象_Scala_Playframework_Playframework 2.0_Scala 2.10 - Fatal编程技术网

Scala Play 2.0应用程序和使用的插件都有;“全球”;对象

Scala Play 2.0应用程序和使用的插件都有;“全球”;对象,scala,playframework,playframework-2.0,scala-2.10,Scala,Playframework,Playframework 2.0,Scala 2.10,我已经编写了一个Play2.0插件,它将所有传入的请求重定向到特定的控制器。我们需要这个模板开发和测试。为此,我的插件有一个全局对象,如下所示: object Global extends GlobalSettings { override def onRouteRequest(request: RequestHeader): Option[Handler] = { Play.application.plugin(classOf[MyPlugin]) match {

我已经编写了一个Play2.0插件,它将所有传入的请求重定向到特定的控制器。我们需要这个模板开发和测试。为此,我的插件有一个全局对象,如下所示:

object Global extends GlobalSettings {

  override def onRouteRequest(request: RequestHeader): Option[Handler] = {

    Play.application.plugin(classOf[MyPlugin]) match {
      case Some(plugin) => plugin.enabled() match {
        case true => Some(MyController.action)
      }
      case None => super.onRouteRequest(request)
    }

  }

}
这个解决方案的问题是,我不可能在主应用程序的
onroutereRequest
中添加额外的逻辑

  • 在插件中是否有其他方法可以实现这一点,然后使用
    onroutereRequest
  • 或者只有在插件启用时才有办法加载
    onroutereRequest
    插件逻辑
  • 或者有没有其他方法可以将两个全局对象用于
    onroutereRequest
  • 谢谢你的帮助


    Torben

    一个插件不应该,永远,永远,永远定义一个应用程序的
    全局

    改为定义一个过滤器,并让应用程序在其过滤器中包括:

    object MyFilter extends EssentialFilter {
      def apply(next: RequestHeader => EssentialAction) = EssentialAction { request =>
        Play.application.plugin(classOf[MyPlugin]) match {
          case Some(plugin) if plugin.enabled() {
            MyController.action(request)
          case _ =>
            next(request)
        }
      }
    }
    

    谢谢你,詹姆斯!我来换这个。“并让应用程序在其过滤器中包含该内容”,这是唯一的方法吗?如果插件已启用,是否可以从插件源动态添加过滤器?