Play 2.0 доступ к запросу в шаблонах

У меня есть следующая упрощенная настройка шаблона:

  • Main (template)
    • Домашняя страница
    • Детали

Теперь, когда пользователь входит в систему, устанавливается атрибут сеанса имя пользователя, чтобы я мог выяснить, вошел ли пользователь в систему или нет. Чтобы помочь мне выяснить, вошел ли пользователь в систему или нет, у меня есть следующий вспомогательный объект сеанса:

object SessionHelper {
  val sessionKey = "username"

  def authenticated(implicit request: RequestHeader) = {
    request.session.get(sessionKey).exists(_ => true)
  }
}

Который я могу использовать в шаблоне, который принимает неявный объект запроса, например :

(implicit request: play.api.mvc.RequestHeader)
...
@if(SessionHelper.authenticated) {
    Authenticated!
}
...

Поскольку, насколько я могу судить, это единственный способ получить неявнуюпеременную в шаблоне, это означает, что везде, где я визуализирую представление, мне нужно явно «определить» неявная переменная запроса. Например:

def index = Action { implicit request =>
  Ok(views.html.index(myStuff))
}

Без неявного оператора request =>он не компилируется. Теперь, хотя это немного неудобно, пока я остаюсь в любом из «подпредставлений» (например, на домашней странице или в деталях), это нормально, потому что для каждого из этих представлений у меня есть метод контроллера и, как таковой, также доступ к неявному Экземпляр RequestHeader. Однако, когда мне нужно получить доступ к сеансу в моем шаблоне (например, Main), это не работает, потому что он никогда явно не отображается контроллером.

Я не сразу вижу способ получить доступ к сеансу в шаблоне, и быстрый поиск в Google не дает ничего, кроме пары вопросов по той же теме без решения.Любые идеи?

Обновление: кажется, что это как-то связано с этим вопросом.

12
задан Community 23 May 2017 в 12:30
поделиться