Pregunta Symfony2 - cómo borrar / editar un mensaje flash


Estoy configurando un mensaje flash en mi controlador cuando renderizo una plantilla de rama. Si hay una acción posterior, me gustaría redireccionar a la misma página, pero cambie el mensaje flash.

if ($request->isMethod('POST')) {
    ...
    ...

    $this->get('session')->getFlashBag()->clear(); // Does not work
    $this->get('session')->getFlashBag()->all();   // Does not work

    $request->getSession()->getFlashBag()->set('user-notice', $flash_message2);

    return $this->redirect($request->headers->get('referer'));
}


$this->get('session')->getFlashBag()->set('user-notice', $flash_message1);

return $this->render(....

Pero el problema es que los mensajes flash mostrados son $ flash_message1, y deberían ser $ flash_message2.

Cuando intento usar add en lugar de set, puedo verlos a los dos. Intenté usar el Symfony2 clear() y all() funciones: http://api.symfony.com/2.3/Symfony/Component/HttpFoundation/Session/Flash/FlashBagInterface.html pero nada cambió.

¿Alguna idea? Gracias !!!


6
2017-11-19 13:35


origen


Respuestas:


Utilizar...

$flashBag = $this->get('session')->getFlashBag();
$flashBag->get('user-notice'); // gets message and clears type
$flashBag->set('user-notice', $flash_message2);

... despues de ti isPost() condición.


12
2017-11-19 13:52



Para borrar todos los mensajes flash use el siguiente código:

$this->get('session')->getFlashBag()->clear();

12
2017-11-11 11:50



Una manera fácil de eliminar todas mensajes flash es el siguiente:

// clear all messages from FlashBag
$flashBag = $this->get('session')->getFlashBag();
foreach ($flashBag->keys() as $type) {
    $flashBag->set($type, array());
}

Esto funciona bien en Symfony 2.4, y probablemente en todas las otras versiones recientes.


2
2018-04-04 07:19