我有以下簡單的模板設置:播放2.0訪問模板要求
- 主(模板)
- 首頁
- 詳細信息現在
當用戶登錄,設置會話屬性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)時,這不起作用,因爲它永遠不會由控制器明確呈現。
我沒有立即看到一種方式來獲得一個模板訪問會話,並快速谷歌沒有透露比沒有解決同一主題的幾個問題多等。有任何想法嗎?
更新:似乎這與this question有點相關。
隨着播放2.3.x版本,我得到 「未找到:價值訴求」。 – Wrench 2015-01-06 19:50:18
@Wrench:看看卡卡的回答,他提供了一個解釋。 總之:你可以有一些隱式的可用。挖掘到這個類 – 2016-08-22 14:38:23