Wie übergeben Sie flash-Daten vom controller zum view mit Spielen! Rahmen

Ich habe das Pflügen durch spielen! so weit, mit ein paar Beulen in der Lernkurve. Jetzt bin ich nicht in der Lage, um pass-flash-Daten vom controller zur view, die auf den ersten ich dachte, war eine einfache Aufgabe, oder sollte es zumindest sein.

Hier ist, was ich jetzt haben:

Ich habe einen main layout: application.scala.html

Habe ich eine Ansicht, die geht in die layout -: login.scala.html

und ich habe meine controller und Methode: UX.authenticate() - ich will dies, um flash-Daten, um die Sicht je nach dem Ergebnis der login-Versuch (erfolgreich vs. nicht)

Dies ist mein code in meinen controller-Methode:

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())
            }
        }
    }

In meinem login, das ich einen parameter: @(implicit flash: Flash)

Wenn ich versuche mit flash nichts wird mit @flash.get("message")

Idealerweise würde ich einstellen wollen @(implicit flash: Flash) im layout, so dass ich die flash-Daten von jedem controller und erreichen meiner Sicht. Aber wenn ich das mache, login anzeigen, wirft Fehler.

In meinem login-Ansicht jetzt habe ich dieses:

def login = Action { implicit request =>
        flash + ("message" -> "test")
        Ok(views.html.ux.login(flash))
    }

Was ist die ideale Art der übergabe von flash-Daten, um die anzeigen, und gibt es Beispiele irgendwo? Die Beispiele auf das Spiel! framework-docs helfen nicht immer und sind nur zwei Beispiele, die zeigen, dass keine Wechselwirkung mit dem Blick auf alle (gefunden hier unten: http://www.playframework.com/documentation/2.0/ScalaSessionFlash).

Gibt es eine einfachere alternative? Was mache ich falsch? Wie kann ich pass flash-Daten direkt an meine layout-Ansicht?

InformationsquelleAutor Ron | 2013-03-20
Schreibe einen Kommentar