我已经编写了一个Play 2.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)
}
}
}
此解决方案存在的问题是,我无法在主应用程序中向onRouteRequest
添加其他逻辑。
onRouteRequest
?onRouteRequest
插件逻辑?onRouteRequest
两个全局对象?感谢您的帮助
托本
答案 0 :(得分:2)
插件永远不应该为应用程序定义Global
。
改为定义过滤器,并让应用程序在其过滤器中包含该过滤器:
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)
}
}
}