如何在main.scala.html模板页面中检索当前URL

时间:2019-06-17 20:13:41

标签: scala playframework

很抱歉这个愚蠢的问题,但是我是Scala的新手,正在学习Scala和Play框架:

我必须在main.scala.html模板页面中实现导航栏,并且必须正确设置活动类。

我正在使用scala 2.12和Play框架2.7.2。

哪种方法可以检索请求对象以获取当前uri?

2 个答案:

答案 0 :(得分:0)

尝试像这样将request作为隐式参数传递给main模板

@(name: String)(implicit request: RequestHeader)

Hello @name. You are at url:
@{request.host}@{request.uri}

确保在控制器中将请求标记为implicit,以使其像这样自动传递到main模板中

class HomeController @Inject()(cc: ControllerComponents) extends AbstractController(cc) {
  def index = Action { implicit request =>
    Ok(views.html.main("Picard"))
  }
}

现在开始前进

GET / controllers.HomeController.index

应输出

Hello Picard. You are at url:
localhost:9000/

答案 1 :(得分:0)

谢谢,我已经检索了请求。

只是为了更好地解释:我的项目设置如下:我有两个控制器HomeController,WidgetController,然后有四个页面main.scala.html(模板),home.scala.html,index.scala.html和listWidget .scala.html。然后我的路线如下:



    GET   /    controllers.HomeController.home
    GET     /index                      controllers.WidgetController.index
    GET     /widgets                    controllers.WidgetController.listWidgets
    POST    /widgets                    controllers.WidgetController.createWidget

我的主模板是这样的:

@(title: String)(content: Html)(implicit request: RequestHeader)

<!DOCTYPE html>
<html lang="en">
    <head>
        @* Here's where we render the page title `String`. *@
        <title>@title</title>
    </head>
    <body>
        <div class="container">
            @(request)
            @content
        </div>
    </body>
</html>

首页看起来像:

@(implicit request: RequestHeader)

@main("Welcome to Play") {
  <h1>Home</h1>
}(request)

HomeController类似于:

@Singleton
class HomeController @Inject()(cc: ControllerComponents) extends AbstractController(cc) {

  def home() = Action { implicit request: Request[AnyContent] =>
    Ok(views.html.home(request))
  }
}

所以我必须在我创建的每个页面中传递请求...这是一种无需修改每个页面即可更轻松地获取请求的方法?