很抱歉这个愚蠢的问题,但是我是Scala的新手,正在学习Scala和Play框架:
我必须在main.scala.html模板页面中实现导航栏,并且必须正确设置活动类。
我正在使用scala 2.12和Play框架2.7.2。
哪种方法可以检索请求对象以获取当前uri?
答案 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))
}
}
所以我必须在我创建的每个页面中传递请求...这是一种无需修改每个页面即可更轻松地获取请求的方法?