为 play framework 2.6 配置的默认控制器包在哪里?
Where is the default controllers package configured for play framework 2.6?
我正在重新介绍 Play Framework,并且有一段时间没有接触它,重新熟悉重要的基础知识。我目前正在查看 Java,但这个问题确实与 Java 或 Scala 无关。
我正在使用 Play Framework 版本 2.6.11
我想更好地了解控制器的设置方式;即,更准确地说,是什么将 'controllers' 包指定为应该放置控制器的默认包。
例如,可以运行看到的第一个入门示例是这样的目录结构:
app/controllers
app/views
app/services
控制器包中有一个Java文件:
CountController.java
路由文件显示一个条目:
GET /count controllers.CountController.count
并且在文件 welcome.scala.html(在 views 包中)可以找到一个动态的 link,其编码如下:
@routes.CountController.count
引用了目标中路由 class 中的成员。
可以注意到,视图中的引用似乎不需要完全限定方法。即,对于“@routes.CountController.count”,控制器包似乎是隐含的。
所以我对自己的第一个问题是;这是硬编码的地方吗?这只是约定俗成,没有办法更改或扩展吗?
翻阅文档,我发现很难找到关于此的任何信息。
因此,为了发现更多,我尝试创建一个自定义包。
我在与控制器、视图、服务等相同的级别创建,
一个包 'altcont' 并在里面放置一个控制器 class 'HelloWorld.java'。
我在路由文件中创建了一个条目:
GET /helloWorld altcont.HelloWorld.greeting
并且我试图从其他页面之一引用它;首先像这样:
"@routes.HelloWorld.greeting"
这没用。
好的。因此,在任意包中发现控制器并不神奇,也不会以某种方式从路由文件中解析完全限定的 class 名称来发现它。它根本找不到它。美好的。所以我试试这个:
"@altcont.routes.HelloWorld.greeting"
成功了!!!
太棒了。好的,所以我理解得更好一点。然而,它仍然意味着
在某个地方,有一些东西告诉游戏,如果一个包没有指定首先在控制器包中查找。
我之前的说法正确吗?
这是可配置的吗?
这是硬编码约定吗?
我在哪里可以找到这个文档?
谢谢!
I would like to better understand how the controllers are setup; i.e., more precisely, what specifies the 'controllers' package as the default package where controllers should be placed.
这只是一个约定,仅此而已。所以,如果你想把你的控制器放在 com.mycompany.controllers
内,你就可以开始了。当然,您需要考虑代码生成方面,例如反向路由。但这无论如何都不是问题。
As one can notice, the reference from the views do not seem to need to fully qualify the method. i.e., for "@routes.CountController.count" the controllers package seems to be implicit.
这是因为@routes.CountController.count
来自反向路由器。完全限定名称是 controllers.routes.CountController
,但默认情况下已在每个视图中导入 controllers._
。
如果您想使用像 com.mycompany.controllers
这样的包,那么反向路由器将是 com.mycompany.controllers.routes.MyController.myAction
。
Great. OK, so I understand it a bit better. Yet, it still implies that
there is, somewhere, something telling play that if a package is not specified to look first in the controllers package.
没有这样的事情。它们只是普通包裹内的普通 类。正如您已经注意到的,更强的约定是由反向路由器生成给出的。
我正在重新介绍 Play Framework,并且有一段时间没有接触它,重新熟悉重要的基础知识。我目前正在查看 Java,但这个问题确实与 Java 或 Scala 无关。 我正在使用 Play Framework 版本 2.6.11
我想更好地了解控制器的设置方式;即,更准确地说,是什么将 'controllers' 包指定为应该放置控制器的默认包。
例如,可以运行看到的第一个入门示例是这样的目录结构:
app/controllers
app/views
app/services
控制器包中有一个Java文件:
CountController.java
路由文件显示一个条目:
GET /count controllers.CountController.count
并且在文件 welcome.scala.html(在 views 包中)可以找到一个动态的 link,其编码如下:
@routes.CountController.count
引用了目标中路由 class 中的成员。
可以注意到,视图中的引用似乎不需要完全限定方法。即,对于“@routes.CountController.count”,控制器包似乎是隐含的。
所以我对自己的第一个问题是;这是硬编码的地方吗?这只是约定俗成,没有办法更改或扩展吗?
翻阅文档,我发现很难找到关于此的任何信息。
因此,为了发现更多,我尝试创建一个自定义包。
我在与控制器、视图、服务等相同的级别创建, 一个包 'altcont' 并在里面放置一个控制器 class 'HelloWorld.java'。
我在路由文件中创建了一个条目:
GET /helloWorld altcont.HelloWorld.greeting
并且我试图从其他页面之一引用它;首先像这样:
"@routes.HelloWorld.greeting"
这没用。
好的。因此,在任意包中发现控制器并不神奇,也不会以某种方式从路由文件中解析完全限定的 class 名称来发现它。它根本找不到它。美好的。所以我试试这个:
"@altcont.routes.HelloWorld.greeting"
成功了!!!
太棒了。好的,所以我理解得更好一点。然而,它仍然意味着
在某个地方,有一些东西告诉游戏,如果一个包没有指定首先在控制器包中查找。
我之前的说法正确吗? 这是可配置的吗? 这是硬编码约定吗? 我在哪里可以找到这个文档?
谢谢!
I would like to better understand how the controllers are setup; i.e., more precisely, what specifies the 'controllers' package as the default package where controllers should be placed.
这只是一个约定,仅此而已。所以,如果你想把你的控制器放在 com.mycompany.controllers
内,你就可以开始了。当然,您需要考虑代码生成方面,例如反向路由。但这无论如何都不是问题。
As one can notice, the reference from the views do not seem to need to fully qualify the method. i.e., for "@routes.CountController.count" the controllers package seems to be implicit.
这是因为@routes.CountController.count
来自反向路由器。完全限定名称是 controllers.routes.CountController
,但默认情况下已在每个视图中导入 controllers._
。
如果您想使用像 com.mycompany.controllers
这样的包,那么反向路由器将是 com.mycompany.controllers.routes.MyController.myAction
。
Great. OK, so I understand it a bit better. Yet, it still implies that
there is, somewhere, something telling play that if a package is not specified to look first in the controllers package.
没有这样的事情。它们只是普通包裹内的普通 类。正如您已经注意到的,更强的约定是由反向路由器生成给出的。