martes, 15 de octubre de 2013

Mensajes de confirmación (Flash messages) Bootstrap 3 en Symfony2

Nuestros formularios funcionan, lo que le falta es el retorno o mensajes de confirmación de las acciones: Crear, Editar, Eliminar; para que el usuario tenga la certeza de que su acción ha sido ejecutada satisfactoriamente.

Para esto Symfony tiene "Flash bag" (antes "Flash message"), y Bootstrap tiene alerts, lo implementaremos en 2 pasos

1.- Agregar el flashbag a los controladores createAction, updateAction y deleteAction siempre después de:

$em->flush();

createAction:

$this->get('session')->getFlashBag()->set(
    'success',
    array(
        'title' => 'Nuevo!',
        'message' => 'Cliente creado con éxito.'
    )
);

updateAction

$this->get('session')->getFlashBag()->set(
    'success',
    array(
        'title' => 'Editado!',
        'message' => 'Cliente actualizado satisfactoriamente.'
    )
);

deleteAction

$this->get('session')->getFlashBag()->set(
    'success',
    array(
        'title' => 'Eliminado!',
        'message' => 'Cliente removido.'
    )
);

2.- Agregar en el layout al comienzo del body:

{% block body -%}
{# aquí va el siguiente código #}

Si hay flash entonces lo itera y muestra:

nano src/Petramas/MainBundle/Resources/views/layout.html.twig

{% for type, flashMessage in app.session.flashbag.all() %}
    <div class="alert alert-{{ type }} fade in">
        <button class="close" data-dismiss="alert" type="button">×</button>
        {% if flashMessage.title is defined %}
        <strong>{{ flashMessage.title }}</strong>
        {{ flashMessage.message }}
        {% else %}
        {{ type }}
        {% endif %}
    </div>
{% endfor %}