【发布时间】: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