私は遊びを耕してきました!これまでのところ、学習曲線にいくつかのバンプがあります。現在、コントローラーからビューにフラッシュデータを渡すことができません。これは、最初は簡単な作業だと思っていましたが、少なくともそうあるべきです。
これが私が今持っているものです:
私はメインのレイアウトを持っています:application.scala.html
レイアウトに含まれるビューがあります:login.scala.html
コントローラーとメソッドがあります:UX.authenticate()-ログイン試行の結果(成功と失敗)に応じて、ビューにフラッシュデータを提供する必要があります
これは私のコントローラーメソッドのコードです:
def authenticate = Action { implicit request =>
val (email, password) = User.login.bindFromRequest.get
// Validation
// -- Make sure nothing is empty
if(email.isEmpty || password.isEmpty) {
flash + ("message" -> "Fields cannot be empty") + ("state" -> "error")
Redirect(routes.UX.login())
}
// -- Make sure email address entered is a service email
val domain = email.split("@")
if(domain(1) != "example.com" || !"""(\w+)@([\w\.]+)""".r.unapplySeq(email).isDefined) {
flash + ("message" -> "You are not permitted to access this service") + ("state" -> "error")
Redirect(routes.UX.login())
} else {
// Attempt login
if(AuthHelper.login(email, password)) {
// Login successful
val user = User.findByEmail(email)
flash + ("message" -> "Login successful") + ("state" -> "success")
Redirect(routes.UX.manager()).withSession(
session + (
"user" -> user.id.toString
)
)
} else {
// Bad login
flash + ("message" -> "Login failed") + ("state" -> "error")
Redirect(routes.UX.login())
}
}
}
ログインビューには、次のパラメータがあります。@(implicit flash: Flash)
フラッシュを使おうとすると何も表示されません@flash.get("message")
理想的には@(implicit flash: Flash)
、レイアウトを設定して、任意のコントローラーからデータをフラッシュして、自分のビューに到達できるようにします。しかし、それを行うたびに、ログインビューはエラーをスローします。
今の私のログインビューにはこれがあります:
def login = Action { implicit request =>
flash + ("message" -> "test")
Ok(views.html.ux.login(flash))
}
フラッシュデータをビューに渡す理想的な方法は何ですか?どこかに例がありますか?Playの例!フレームワークのドキュメントはまったく役に立ちません。ビューとの相互作用をまったく示さない2つの例に限定されています(下部にあります:http ://www.playframework.com/documentation/2.0/ScalaSessionFlash )。
より簡単な代替手段はありますか?私は何が間違っているのですか?フラッシュデータをレイアウトビューに直接渡すにはどうすればよいですか?