2016-09-18 9 views
1

I'amの作業とのhrefPLayframeworkはPlayframeworkにかなり新しい

ルート

GET /       controllers.Index.show 
GET  /signin      controllers.SignIn.show 
GET  /signup      controllers.SignUp.show 

インデックス(ビュー)

をクリックしてから別のテンプレートにリダイレクトするいくつかのトラブルを持っていないリダイレクト
<li> 
    <a href="@controllers.Index.signOut()"> 
    Uitloggen 
    </a> 
</li> 

ランキング(コントローラ)

public static Result signOut() { 
    return redirect(routes.SignIn.show()); 
} 

サインイン

public static Result show() { 
    return ok(signin.render("Inloggen")); 
} 

enter image description here

もこの試み(コントローラ)

public static Result signOut() { 
    return SignIn.show();  // <-- call to SignIn (controller) 
} 

enter image description here

しかし、いつでも私は、ユーザーのルート:私のブラウザで直接/サインインそれだけで正常に動作します。..

私はここで何をしないのですか?

+0

なぜhrefに '/ signin'を入れていないのですか? –

答えて

1

ルートエントリには、以下の構造を有する:

[HTTP method] [url] [controller method] 

ルートファイルエントリの2番目の列は、ブラウザから使用するURLです。 urlをブラウザに提供すると、PlayはURLの値をルートファイルで探し、コントローラメソッドを呼び出します。

あなたのインデックスは次のように実装されています

public static Result signOut() { 
    return redirect(routes.SignIn.show()); 
} 

ので、コントローラのメソッドは、Index.signOutです。 のは、それへのURLを割り当て、routesファイルにエントリを追加してみましょう:

GET  /signout  controllers.Index.signOut 

とすぐにブラウザにURL /サインアウトを提供しますよう、リダイレクションが行われます。

ところで、あなたの例では、ルート/サインアップに指定されたSignUpコントローラがありません。

特別な理由がない場合は、コントローラメソッドから静的メソッドを削除することもお勧めします。

+0

お返事ありがとうございます。それは私には明らかではなかった、それぞれの行動は実際には別のルートにリダイレクトされたときでさえ自分のルートが必要でした。 SignUpコントローラが見つからない理由は、この例では使用していないためです。 ここで私を助けてくれてありがとう! –

+0

Btw、静的を削除するとコンパイルエラーが発生します:signOutはobject controllers.Indexのメンバーではありません –

1

試してみてください。

<li> 
    <a href="@routes.SignIn.show()"> 
    Uitloggen 
    </a> 
</li> 
+0

これはうまくいきますが、サインアウトのためにリダイレクトするだけのロジックが必要です。 –

関連する問題