我一直在玩游戏!到目前为止,学习曲线有一些颠簸。现在我无法将闪存数据从控制器传递到视图,起初我认为这是一项微不足道的任务,或者至少应该如此。
这是我现在拥有的:
我有一个主要布局: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 中的示例!框架文档没有任何帮助,并且仅限于两个根本不显示与视图交互的示例(在底部找到:http ://www.playframework.com/documentation/2.0/ScalaSessionFlash )。
有没有更简单的选择?我究竟做错了什么?如何将闪存数据直接传递到我的布局视图?