Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

Flash Messages und Session

Flash Messages und Session

~11 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026

Zum Abschluss von Block 2 lösen wir ein sehr praktisches Problem: eine Erfolgsmeldung NACH einem Redirect anzeigen – das klassische Post/Redirect/Get-Muster.

Das Problem ohne Flash Messages

Nach dem Anlegen eines Projekts (Kapitel 11) leiten wir per redirectToRoute('project_index') weiter – aber wie zeigen wir auf der NEUEN Seite "Projekt erfolgreich erstellt!" an? Die Meldung muss den Redirect "überleben".

Flash Messages: die Lösung

#[Route('/projects/new', name: 'project_new', methods: ['POST'])]
public function new(Request $request): Response
{
    // ... Projekt anlegen ...

    $this->addFlash('success', 'Projekt erfolgreich erstellt!');

    return $this->redirectToRoute('project_index');
}

addFlash('success', ...) speichert die Nachricht in der SESSION unter der Kategorie 'success' (frei wählbar, üblich sind success, error, warning, info). Eine Flash-Nachricht wird EXAKT EINMAL angezeigt – beim NÄCHSTEN Auslesen wird sie automatisch aus der Session entfernt.

Flash Messages in Twig anzeigen (Vorgriff auf Kapitel 13)

templates/base.html.twig
<body>
    {% for label, messages in app.flashes %}
        {% for message in messages %}
            <div class="alert alert-{{ label }}">{{ message }}</div>
        {% endfor %}
    {% endfor %}

    {% block body %}{% endblock %}
</body>

app.flashes ist eine in JEDEM Twig-Template automatisch verfügbare Twig-Variable – da wir das im base.html.twig-Layout platzieren (Kapitel 14 erklärt Twig-Vererbung), erscheint JEDE Flash-Nachricht automatisch auf JEDER Seite, ohne dass jeder einzelne Controller sich darum kümmern müsste.

Die Session direkt nutzen

Über Flash Messages hinaus lässt sich die Session auch für LÄNGER lebende Daten verwenden – z. B. ein zuletzt ausgewähltes Projekt, das über mehrere Anfragen hinweg gemerkt werden soll:

use Symfony\Component\HttpFoundation\Session\SessionInterface;

#[Route('/projects/{id}', name: 'project_show', requirements: ['id' => '\d+'])]
public function show(int $id, SessionInterface $session): Response
{
    $session->set('letztes_projekt_id', $id);

    return new Response('Projekt-Details für ID ' . $id);
}
// An anderer Stelle, z. B. im Dashboard:
$letzteId = $session->get('letztes_projekt_id');
if ($letzteId !== null) {
    // "Weiter wo Sie aufgehört haben"-Link anzeigen
}

Achtung: Session-Daten liegen SERVERSEITIG (standardmäßig als Dateien in var/cache/sessions/) und sind per Session-Cookie an EINEN Browser gebunden. Für Daten, die zwischen VERSCHIEDENEN Geräten/Browsern eines Nutzers geteilt werden sollen, ist die Datenbank (Block 4) der richtige Ort, NICHT die Session.

Flash Message vs. Session: eine Faustregel

WerkzeugLebensdauer
Flash MessageEinmalige Meldung für den NÄCHSTEN Request, wird danach automatisch gelöscht – ideal für Erfolgs-/Fehlermeldungen nach einem Redirect.
Session (direkt)Länger lebende Daten über MEHRERE Requests hinweg, bleibt bis zum expliziten Löschen oder Session-Ablauf bestehen.

Damit ist Block 2 (Routing & Controller) abgeschlossen! Block 3 widmet sich Twig und Formularen – endlich sehen unsere Seiten wie ECHTE Webseiten aus, statt nur Text-Responses zurückzugeben.