У меня есть следующие упрощенные настройки шаблона:
- Main (шаблон)
- Домашняя страница
- Подробности
Теперь, когда пользователь входит в систему, атрибут сеанса username
устанавливается так, чтобы я мог выяснить, вошел ли пользователь в систему или нет.Чтобы помочь мне выяснить, вошел ли пользователь в систему или нет, у меня есть следующий вспомогательный объект сеанса:
object SessionHelper {
val sessionKey = "username"
def authenticated(implicit request: RequestHeader) = {
request.session.get(sessionKey).exists(_ => true)
}
}
, который я могу использовать в шаблоне, который принимает объект запроса implicit
,например:
(implicit request: play.api.mvc.RequestHeader)
...
@if(SessionHelper.authenticated) {
<strong>Authenticated!</strong>
}
...
Поскольку - насколько я могу судить - это единственный способ получить неявную переменную в шаблоне, это означает, что везде, где я отображаю представление,Мне нужно явно "определить" неявную переменную запроса.Например:
def index = Action { implicit request =>
Ok(views.html.index(myStuff))
}
Без оператора implicit request =>
он не компилируется.Теперь, хотя это немного неловко, пока я остаюсь в любом из «подвидов» (например, «Домашняя страница» или «Подробности»), это хорошо, потому что для каждого из этих представлений у меня есть метод контроллера и, следовательно, также доступ к неявному RequestHeader
экземпляр.Тем не менее, когда мне нужно получить доступ к сеансу в моем шаблоне (например, Main), это не работает, потому что он никогда явно не отображается контроллером.
Я не сразу вижу способ получить доступк сеансу в шаблоне, и быстрый Google не раскрывает ничего, кроме пары вопросов по той же теме без разрешения.Есть идеи?
Обновление: похоже, это как-то связано с этим вопросом .