Kolejna ciekawa rzecz, znamy to z Laravela, w Symfony też to mamy. Zobaczmy, jak działają flash messages.

Ok, najpierw modyfikacja base template:

<body>
        {% for message in app.flashes('success') %}
            <div style="color: green">{{ message }}</div>
        {% endfor %}
        {% block body %}{% endblock %}
</body>

Teraz rzućmy okiem na dice oraz na redirecty:

#[Route('/redirect_one', name: 'app_redirect_one', methods: ['GET', 'HEAD'])]
    public function redirect_one(): Response
    {
        return $this->redirect('/hello');
    }

    #[Route('/redirect_two', name: 'app_redirect_two', methods: ['GET', 'HEAD'])]
    public function redirect_two(): Response
    {
        return $this->redirectToRoute('app_hello');
    }

    #[Route('/redirect_three', name: 'app_redirect_three', methods: ['GET', 'HEAD'])]
    public function redirect_three(): Response
    {
        return $this->forward('App\Controller\HelloController::index');
    }

    #[Route('/dice', name: 'app_dice', methods: ['GET', 'HEAD'])]
    public function dice(): Response
    {
        $player = random_int(1,6);
        $computer = random_int(1,6);

        return $this->render('hello/dice.html.twig', [
            'player' => $player,
            'computer' => $computer
        ]);
    }

Zróbmy route, która przekierowuje na dice z flashem:

#[Route('/flashdice', name: 'app_flash_dice', methods: ['GET', 'HEAD'])]
    public function flashdice(): Response
    {   $this->addFlash("success", "Redirected to dice roll!");
        return $this->redirectToRoute('app_dice');
    }

Jak większość rzeczy w Symfony, mamy dostępne przez dziedziczenie pod this. Tak jest i z flashem i jeszcze wieloma innymi rzeczami.

Cóż, teraz jak przez flashdice wejdziemy to dostaniemy wiadomość, która po odświeżeniu albo wejściu przez /dice bez przekierowania nie będzie widoczna.