symfony ¿consulta en el layout?

m3l0

Buenas, veréis tengo una entidad de mensajes privados y quiero mostrar en todo momento los mensajes sin leer vamos, como si fuera un foro.
la cosa es que no se muy como hacerlo
¿tengo que realizar la consulta en el layout?(¿renderizando un controller?)
¿lo guardo de alguna manera en la entidad de usuario?
¿realizar la consulta en todos los controllers y retornarlo?
esto ultimo es una guarrada ¿no?.

Merkury

#1 Yo lo que hago para eso tipo de menesteres es un controlador que devuelve un Json, te dejo un ejemplo.


  public function newMessagesNotificationAction()
  {
       
$conversaciones = $this->getUser()->getConversaciones(); $noLeidos = array(); foreach($conversaciones as $c) { if($c->hasUnread($this->getUser()) == true) { $noLeidos[$c->getId()] = true; } } $respuesta = array( 'respuesta' => 'OK', 'responseCode' => 200, 'cantidadDeConversaciones' => sizeof($noLeidos), ); return new JsonResponse($respuesta, 200, array('ContentType', 'application/json')); }

con eso me devuelvo un Json con la cantidad de mensajes, el codigo 200 para decirme que esta bien (aunque lo mando tambien en el return)

En el front end lo que hago es meter la ruta para llamar a este controller en un data atribute de HTML5

<li>
   <a href="{{ path('mg_show_notificaciones_client', {'empId':empresa.id}) }}" id="cenot" data-path="{{ path('mg_change_estado_alert_client', {'empId':empresa.id}) }}">
      <span class="noback"> Nuevas notificaciones</span><span class="notifications gestchange" data-toggle="none"></span>
   </a>
</li>

Y finalmente desde jQuery tnego una funcion que va invocandose cada X tiempo

function updateChangeNotifications()
    {
        var url = $('#cenot').data('path');

    $.post(url, function(response){
        if(response.responseCode == 200 && response.respuesta == 'OK' && response.numeroNotificaciones > 0)
        {
            $('.noback').fadeIn('slow', function(){
                $('.gestchange').html(response.numeroNotificaciones).fadeIn('slow')
            });

        }
    });
}
 var notifChangeCheck = setInterval(function(){ updateChangeNotifications()}, 60000);

Y con esto en todo momento se muestran las notificaciones (si existen claro :D )

Espero que te sea de ayuda.

1 1 respuesta
m3l0

#2 gracias, joe con el código y todo muchas gracias, me acabas de salvar la vida!

1 respuesta
Merkury

#3 Son 10000 hahaha

Usuarios habituales

  • Merkury
  • m3l0