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