2013-08-29 46 views
1

我试图在URI路由中动态定义一个版本。播放框架:取决于版本号的动态路由

我immidiate的想法是,以

一) 我在application.conf配置一排,说明我目前的版本:

myApp.ver = 0.1 

我wan't在路由文件中使用它作为URI的一部分,例如:

GET /myApp/{version}/welcome controller.myApp.Welcome() 

的想法是不是版本号传递到欢迎()方法 但要获得版本从application.conf文件中删除。

我已经在路径文件中搜索了定义参数,但没有找到帮助我的信息。

b)另一种想法是在路由的变量,像这样:

CurrentVersion = 0.1 

在路由文件和URI使用它。

我该如何解决这个问题?我没有找到一个这样的例子。

谢谢。

回答

0

如果您想对每条路线都这样做,应该可以将application.baseUrl设置为包含您的版本号。要方便地进行此操作,您可以在application.conf而不是Build.scala文件as described here中定义版本。

myApp.name = myApp 
myApp.ver = 0.1 
application.baseUrl = ${myApp.name}/${myApp.ver} 

如果你只想对某些路线做这件事,似乎没有一个简单的解决方案。如果你可以忽略路由中的参数,我会说使用regexp参数并在你的全局路由器中验证它 - 不幸的是这个doesn't seem possible没有传递参数给控制器。

所以,我看其他两个选项:

  1. 硬编码的路径文件的版本号,并做了搜索和替换每次改变时间。
  2. 为sbt构建过程创建一个插件,并让它替换路径文件中的版本。
0

在玩1.2.x版本,在您的conf/routes文件,添加一个路线是这样的:

GET /myApp/${play.configuration.getProperty("myApp.ver")}/welcome  myApp.Welcome() 
+0

这给了我:'sbt.PlayExceptions $ RoutesCompilationException:编译错误[标识预期]'。我不认为你可以使用与模板相同的语法。 – Kapep

+0

我们可以使用与模板相同的语法。我已经证实这对我有用。我假设Play 1.2.x版本。对于2.x,您可能需要以类似的方式进行操作。 –

+0

这个问题被标记为play 2,我查看了play 2的路由文件解析器,但没有看到任何用于替换这样的变量的功能。 – Kapep