У меня есть следующая упрощенная настройка шаблона:
- Главная (шаблон)
- Главная
- Подробнее
Теперь, когда пользователь входит в систему, атрибут сеанса 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 не раскрывает ничего, кроме нескольких вопросов по одной теме без разрешения. Любые идеи?
Обновление: похоже, что это несколько связано с этим вопросом.