ho la seguente configurazione modello semplificato:Gioca accesso 2.0 richiedere nei modelli
- principale (template)
- Homepage
- dettagli
Ora, quando un utente accede, un attributo di sessione username
è impostato in modo che possa capire fuori se un utente è loggato o meno. Al fine di aiutarmi a capire se un utente è connesso o no, ho il seguente oggetto sessione di helper:
object SessionHelper {
val sessionKey = "username"
def authenticated(implicit request: RequestHeader) = {
request.session.get(sessionKey).exists(_ => true)
}
}
cui posso utilizzare in un modello che prende un oggetto implicit
richiesta, ad esempio:
(implicit request: play.api.mvc.RequestHeader)
...
@if(SessionHelper.authenticated) {
<strong>Authenticated!</strong>
}
...
Dal — per quanto posso dire — questo è l'unico modo per ottenere un implicito variabile in un template, significa che ovunque mi rendo vista, ho bisogno di esplicitamente "definire" la richiesta implicita variabile. Per esempio:
def index = Action { implicit request =>
Ok(views.html.index(myStuff))
}
Senza la dichiarazione implicit request =>
, esso non viene compilato. Ora, mentre questo è un po 'imbarazzante, finché rimango in una delle "sotto-viste" (ad esempio Homepage o Dettagli) va bene perché per ognuna di queste visualizzazioni ho un metodo di controllo e come tale anche l'accesso implicito RequestHeader
esempio. Tuttavia, quando ho bisogno di accedere alla sessione nel mio modello (ad esempio Main) questo non funziona perché non viene mai reso esplicitamente da un controller.
Non vedo immediatamente un modo per accedere alla sessione in un modello e un rapido Google non rivela molto altro che un paio di domande sullo stesso argomento senza risoluzione. Qualche idea?
Aggiornamento: sembra che questo sia in qualche modo correlato a this question.
del gioco con il 2.3.x, ottengo "non trovato: richiesta di valore". – Wrench
@Wrench: guarda la risposta di kaka, offre una spiegazione. In breve: è possibile avere alcuni impliciti disponibili. Scava in quella classe –