25

Play 中是否有办法注释路线以通知某个部分/组路线仅在开发或生产模式下可用

4

2 回答 2

37

好吧,这没有记录,所以我不确定这是否是有意的,但我已经找到了一种方法来完成这项工作。但是请注意,由于这是一个未记录的功能,可能意味着它是无意的,因此可能会在未来的游戏版本中中断。

您可以使用路由文件中的以下行来实现您想要的。

%{ if (play.mode.isDev()) }%

我用几个动作创建了一个测试应用程序

public class Application extends Controller {

    public static void index() {
        render();
    }

    public static void noDev() {
        renderText("NoDev");
    }
    public static void noProd() {
        renderText("NoProd");
    }
}

然后我将以下内容添加到我的路线文件中

# Home page
GET     /                                       Application.index

# Ignore favicon requests
GET     /favicon.ico                            404
# Map static resources from the /app/public folder to the /public path
GET     /public/                                staticDir:public

%{ if (play.mode.isDev()) }%
GET     /route1                                 Application.noDev
GET     /route2                                 Application.noDev
GET     /route3                                 Application.noDev
*       /{controller}/{action}                  {controller}.{action}

%{ if (play.mode.isProd()) }%
GET     /route4                                 Application.noProd
GET     /route5                                 Application.noProd
GET     /route6                                 Application.noProd
*       /{controller}/{action}                  {controller}.{action}

因此,您可以看到,使用一个简单的 if 语句,它将仅在该模式下执行下一组路由。if 语句将在找到下一个 if 语句时结束。

如果在 Dev 模式下您尝试访问 route4,您将无法访问它,并且您将看到 RouteNotFound 页面显示可用的路由是您为 Dev 定义的那些。

于 2011-07-15T06:11:46.970 回答
2

对于播放框架版本 2.x:

  • 您需要在应用程序的根目录中拥有另一个routes文件prod.routes(与原始routes文件相同的目录),该文件仅包含您想要用于生产的路由。
  • 然后你创建另一个.conf文件,比如prod.conf里面的conf文件夹。
  • 现在这个新的 conf 文件必须包含以下内容:

对于播放框架 2.4 及更高版本:

include "application.conf"

play.http.router=prod.Routes

或者没有新的.conf文件传递参数:

-Dplay.http.router=prod.Routes

如果早于 2.4 则:

include "application.conf"

application.router=prod.Routes

当你运行生产时,运行它-Dconfig.file=prod.conf

于 2016-06-15T04:56:26.300 回答