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.