Как получить текущий URL-адрес на странице шаблона main.scala.html

Извините за глупый вопрос, но я новичок в Scala и изучаю Scala и Play Framework:

Мне нужно реализовать панель навигации на моей странице шаблона main.scala.html, и я должен правильно установить активный класс.

Я использую scala 2.12 и Play framework 2.7.2.

Как получить объект запроса, чтобы получить текущий uri?


2
521
2

Ответы:

Решено

Попробуйте передать 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/

Спасибо, я получил запрос.

Просто чтобы лучше объяснить: настройки моего проекта следующие: у меня есть два контроллера 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))
  }
}

поэтому я должен передать запрос на каждой странице, которую я делаю... это более разумный способ получить запрос без изменения каждой страницы?