您可以通过以下方式访问模板中的反向路由:
@routes.controllersFolder.MyControllerName.endPointName
这将解析路由。
例如路由文件:
GET /myApp/endpointExample controllersFolder.MyControllerName.endPointName
所以
@routes.controllersFolder.MyControllerName.endPointName
将解析为:
/myApp/endpointExample
如果您希望在客户端将其用于 AJAX,我强烈推荐 JSRoutes。
如果你想拥有控制器的功能,那么你应该将它解耦到一个模块中,例如:
trait MyTrait {
def add(x: Int, y: Int): Int = x + y
}
@Singleton
class MyClass with MyTrait
@Singleton
class MyController @Inject() (myClass: MyClass) extends Controller {
def endPointName(x: String, y: String): Action[AnyContent] = {
try {
Ok(
Json.toJson(
Json.obj(
"result" -> myClass.add(
x = x.toInt,
y = y.toInt
)
)
)
)
} catch {
case e: NonFatal => BadRequest(
Json.toJson(
Json.obj(
"error" -> e.getMessage
)
)
}
}
}
然后您可以参考 MyClass 的逻辑,而不必形成请求,将逻辑解耦如下:
@Singleton
class MyOtherController @Inject() (myClass: MyClass) extends Controller {
def myHtmlPage(): Action[AnyContent] = {
views.html.myView(myClass)
}
}
在 HMTL 中
myView.scala.html:
@(myClass: MyClass)
@myClass.add(1, 2) // = 3
我希望这会有所帮助,
里斯