在没有 Request 实例的情况下播放反向路由

Wei*_*ier 6 scala playframework

我正在使用模板在 Play 中生成电子邮件。该电子邮件包含一个通过反向路由生成的 URL :

<a href="@routes.MyController.downloadFile(user).absoluteURL()">
Run Code Online (Sandbox Code Playgroud)

问题是,该downloadFile函数需要一个implicit request: Request参数(作为 any Action),而我Request在发送电子邮件时并不总是有一个(它可以从请求/响应工作流中触发)。

有没有办法获得反向路线?或者也许我应该向它传递一个虚拟请求对象(然后,如何生成一个?)

小智 1

当隐式请求不可用时,您应该使用下面定义的方法play.mvc.Callplay.api.mvc.Call由反向路由器扩展javaplay.mvc.Call类返回,因此不需要额外的工作):

/**
 * Transform this call to an absolute URL.
 *
 * @param secure true if the absolute URL should use HTTPS protocol instead of HTTP
 * @param host the absolute URL's domain
 * @return the absolute URL string
 */
 public String absoluteURL(boolean secure, String host)
Run Code Online (Sandbox Code Playgroud)

查看代码示例:

@(secure: Boolean, host: String)
<a href="@routes.MyController.downloadFile(user).absoluteURL(secure, host)">
Run Code Online (Sandbox Code Playgroud)

securehost可以从请求中获取或在应用程序配置中的某个位置定义。