【问题标题】:Where is the default controllers package configured for play framework 2.6?为 play framework 2.6 配置的默认控制器包在哪里?
【发布时间】:2018-02-07 11:02:25
【问题描述】:

我正在重新向自己介绍 Play Framework,并且有一段时间没有接触它,重新熟悉了重要的基础知识。我目前正在研究 Java,但这个问题确实与 Java 或 Scala 无关。 我正在使用 Play Framework 2.6.11 版

我想更好地了解控制器是如何设置的;即,更准确地说,是什么将“控制器”包指定为应放置控制器的默认包。

例如,第一个可以运行的入门示例会看到这样的目录结构:

app/controllers
app/views
app/services

控制器包中有一个Java文件:

CountController.java

路由文件显示一个条目:

GET     /count                      controllers.CountController.count

在文件welcome.scala.html(在views包中)可以找到一个动态链接,代码如下:

@routes.CountController.count

它引用了目标中路由类中的一个成员。

正如人们所注意到的,来自视图的引用似乎不需要完全限定该方法。即,对于“@routes.CountController.count”,控制器包似乎是隐含的。

所以我问自己的第一个问题是:这是硬编码的地方吗?这只是约定俗成的,有没有办法改变或扩展呢?

翻遍文档,我发现很难找到任何相关信息。

所以,为了发现更多信息,我尝试创建一个自定义包。

我在与控制器、视图、服务等相同的级别上创建, 一个包“altcont”并在其中放置一个控制器类“HelloWorld.java”。

我在路由文件中创建一个条目:

GET     /helloWorld                 altcont.HelloWorld.greeting

我尝试从其他页面之一引用它;首先是这样的:

"@routes.HelloWorld.greeting"

这不起作用。

好的。因此,在任意包中发现控制器并没有什么神奇的方法,它也不会以某种方式从路由文件中解析完全限定的类名来发现它。它根本找不到它。美好的。所以我试试这个:

"@altcont.routes.HelloWorld.greeting"

成功了!!!

太好了。好的,所以我明白了一点。然而,它仍然意味着

在某个地方,有一些东西告诉 play,如果一个包没有被指定为首先在控制器包中查找。

我之前的说法正确吗? 这是可配置的吗? 这是硬编码的约定吗? 我在哪里可以找到此文档?

谢谢!

【问题讨论】:

    标签: playframework routes controllers


    【解决方案1】:

    我想更好地了解控制器是如何设置的;即,更准确地说,是什么将“控制器”包指定为应放置控制器的默认包。

    这只是一个约定,仅此而已。所以,如果你想把你的控制器放在com.mycompany.controllers 里面,你就可以走了。当然,您需要考虑代码生成方面,例如反向路由。但这无论如何都不是问题。

    正如人们所注意到的,来自视图的引用似乎不需要完全限定该方法。即,对于“@routes.CountController.count”,控制器包似乎是隐含的。

    这是因为@routes.CountController.count 来自反向路由器。完全限定名称是 controllers.routes.CountController,但默认情况下,controllers._ 已在每个视图中导入。

    如果你想使用像com.mycompany.controllers这样的包,那么反向路由器将是com.mycompany.controllers.routes.MyController.myAction

    太好了。好的,所以我明白了一点。然而,它仍然意味着

    在某个地方,如果没有指定包在控制器包中首先查找,则有一些东西告诉 play。

    没有这样的事情。它们只是常规包中的常规类。正如您已经注意到的,反向路由器生成给出了更强的约定。

    【讨论】:

    • "但是 controllers._ 已经在每个视图中默认导入。"啊,这就解释了。谢谢!
    猜你喜欢
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 2019-05-19
    • 2012-12-15
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    相关资源
    最近更新 更多