2009-05-29 7 views
3

In einer Aktion, habe ich ein Feedback für die Nutzer:Verwende ich die Symfony Flash-Variablen falsch?

$this->getUser()->setFlash('message', array(
    "type" => "notice", 
    "content" => "Well done buddy, you did it." 
    )); 

    $this->redirect('home/index'); 

In der Ansicht, verwende ich nur den folgenden Code:

<?php if ($sf_user->hasFlash('message')): $message = $sf_user->getFlash('message') ?> 
    <p class="<?php echo $message["type"] ?>" ><?php echo $message["content"]?></p> 
<?php endif; ?> 

Aber die Nachricht nie angezeigt.

Nicht das Problem ist nicht "es erscheint einmal, dann verschwindet es, denn das würde bedeuten, dass es funktioniert. Das Problem ist, dass es nie erscheint. Nicht einmal.

Ich benutze Symfony 1.2, deshalb flash var sind jetzt gebunden an das Benutzerobjekt.

Antwort

2

Versuchen Sie das gleiche mit zwei setFlash mit Strings (nicht Array). Ich denke, das wird funktionieren. Symfony entkommt Arrays beim Zugriff auf die Vorlage. versuchen Sie var_dump($sf_user->getFlash('message')); um sicher zu sein, was Sie bekommen.

1

Blinken in Symfony sind für die Anzeige der Antwort genau einmal auf einer Seite, d. H. "Flash" eine Nachricht. Wenn die Seite aktualisiert wird, ist dieser Flash nicht mehr da.

unter der Annahme, so dass der Benutzer ein Formular vorgelegt, und die Aktion ausgeführt, um den folgenden Code

$this->getUser()->setFlash('message', 'Some message here'); 

Und die Aussicht hat folgende

# Note: getFlash returns "" if flash is not set 
echo $sf_user->getFlash('message'); 

Dann wird die erste Anforderung von diesem Benutzer zur Ansicht Nach dem Absenden des Formulars, und die Einstellung dieses Blitzes würde dazu führen, dass getFlash "Eine Nachricht hier" zurückgibt und den Blitz entfernt/unscharf wird. Jede Anforderung derselben Nachricht von diesem Benutzer gibt nun eine leere Zeichenfolge zurück.

Was das bedeutet ist, dauert ein Flash nur für eine Anfrage. Es ist eine gute Möglichkeit, Formularantworten auf derselben Seite wie das Formular anzuzeigen.

+0

Ich weiß, dass Flash Ephemertialvariablen sind. Ich meinte es nicht einmal funktionieren, dann habe ich die Webseite neu geladen und es hat nicht funktioniert. Ich meinte, es funktionierte einmal wie erwartet, dann funktionierte der ganze Mecanisme nicht mehr. Vielleicht habe ich etwas verändert, aber ich fühle mich nicht danach. –

+0

Ich verstehe die Verwirrung, also habe ich den Satz entfernt, um zu vermeiden, dass diese Antwort wiederholt wird. –

Verwandte Themen