[Symfony] Jak zrobić powiadomienia (FlashMessenger) na stronie ?

Programowanie
[Symfony] Jak zrobić powiadomienia (FlashMessenger) na stronie ?

Użytkownik wykonując różne operacje czy to w aplikacji czy też na zwykłej stronie internetowej oczekuje czasem informacji zwrotnej. Najprostszy przykład to formularz kontaktowy, który po uzupełnieniu jest przesyłany do właściciela strony. Po wypełnieniu i kliknięciu wyślij użytkownik oczekuje informacji czy udało się wysłać dane z formularza czy też nie.

Podany powyżej przykład jest bardzo prosty jednak obrazuje problem w sposób wystarczający. Teraz pytanie jak go rozwiązać wykorzystując Symfony ? Otóż rozwiązanie jest proste i jeśli mieliście kontakt z innym frameworkiem to z pewnością już się z nim spotkaliście – FlashMessenger. Idea jest bardzo prosta, do sesji wrzucamy informację która po pobraniu jest usuwana 😉

Poniżej mamy wycięty kawałek kodu z akcji kontrolera, poniższy kod ustawia powiadomienie o błędzie i powiadomienie o sukcesie jakiejś operacji.

...
$this->get('session')->getFlashBag()->add('danger', "Wystąpił błąd");
$this->get('session')->getFlashBag()->add('success', "Operacja zakończona powodzeniem");
...

Następnie w widoku odwołujemy się do ustawionych powiadomień:

{% for message in app.session.flashbag.get('danger') %}
    <div class="alert alert-danger">{{ message }}</div>
{% endfor %}
{% for message in app.session.flashbag.get('success') %}
    <div class="alert alert-success">{{ message }}</div>
{% endfor %}

Powyższy kod możemy przenieść do pliku i go dołączyć do layoutu co będzie dość eleganckim rozwiązaniem.

Możemy także dokonać modyfikacji kodu na kod wyświetlający wszystkie powiadomienia nie tylko „danger” i „success”.

{% for label, flashes in app.session.flashbag.all %}
    {% for flash in flashes %}
        <div class="alert alert-{{ label }}">
            {{ flash }}
        </div>
    {% endfor %}
{% endfor %}