2012-03-17 11 views
12

に要求への2.0のアクセスを再生しますユーザーがログインすると、セッション属性usernameが設定されますユーザーがログインしているかどうかを確認します。私は、例えば、implicitリクエストオブジェクトを受け取り、テンプレートで使用できるは、私は、以下の単純化されたテンプレートのセットアップを持っているテンプレート

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) { 
    <strong>Authenticated!</strong> 
} 
... 

変数。例:

def index = Action { implicit request => 
    Ok(views.html.index(myStuff)) 
} 

implicit request =>ステートメントがないと、コンパイルされません。これはちょっと厄介ですが、「サブビュー」(例:ホームページや詳細)のいずれかにとどまっている限り、これらのビューのそれぞれにコントローラメソッドがあり、暗黙のうちに暗黙のアクセスにもアクセスできるので、問題ありません。RequestHeaderインスタンス。ただし、テンプレート(たとえば、メイン)のセッションにアクセスする必要がある場合、コントローラーによって明示的にレンダリングされないため、これは機能しません。

私はすぐにテンプレートのセッションにアクセスする方法を見ていません。クイックグーグルでは解決できない同じトピックについていくつかの質問以外に多くのことを明らかにしていません。何か案は?

更新:のように思えますが、this questionと多少関係があります。

答えて

8

暗黙のリクエストを、少なくともPlay Framework 2.0の時点ではなく、すべてのテンプレートに渡すことはできません。

更新プログラムで追加するリンクは、1つのオブジェクト内のテンプレートの周りにもっと多くのデータを移動することですが、暗黙のパラメータをどこでも宣言する必要があります。

2

興味深いことに気付きました。私のJava Play 2.1.0アプリケーションでは、Play 1.2.5 documentationに記載されている暗黙のオブジェクトを使用することができますが、それらはプレイ2ですべて記述されていません!おそらく、それは文書化されていない後方互換性の修正のようなものでしょう。とにかく、私はこれを行うことができます。

<li @if(request.uri == routes.Help.index.url){class="active"}> 

と、これを:あなたが見ることができるように、私はそれらを定義せずにrequestflash変数を使用することができ

@for((key, message) <- flash) { ... } 

。私のIntelliJは常にそれをエラーとしてハイライトしますが、とにかくコンパイルして動作します。だから、2.0より後のいくつかのバージョンのように見えて、この問題に対処しました。それはコンパイル、

<li @if(requestHeader.uri == routes.Help.index.url){class="active"}> 

はちょうどあなたのIDEでエラーを無視しても実行します:あなたは、Javaのためのプレイを使用している場合

+2

は、私が "が見つかりません:値要求" を得る:

requestHeader方法

は、クラスplay.TemplateImportsによって自動的にインポートしました。 – Wrench

+0

@Wrench:カカの答えを見て、彼は説明をします。 要するに、暗黙のうちに何らかの暗黙的なものが利用可能です。そのクラスに掘り下げる –

2

、何かこれを行うことができます。プレイ2.3.x以降では

javaImports.add("play.core.j.PlayMagicForJava._"); 
関連する問題