SF2: Compartiendo datos en todas las vistas

La entrada anterior hablaba algo sobre compartir datos en todas las vistas a través de un Listener, método que no me ha convencido del todo. Al final he optado por hacerlo de otra forma.
Supongamos una página web con elementos comunes (header, footer, navbar, sidebar)... donde queremos que aparezcan los 5 últimos artículos en el lateral a lo largo de toda la página web.
La primera opción sería hacer la query en cada uno de los controladores y pasar el array de datos cada vez que llamemos a una vista. Pero cuando el número de vistas y controladores va aumentando es tedioso repetir el mismo código siempre. Mi primera intención era centralizar todo en el __construct() del Controller y extender a todos los métodos de la clase pero en SF2 no es posible hacerlo así.
La siguiente opción fue crear un Listener que inyecte dicho array en todas las peticiones, pero tampoco acabó de convencerme. Siendo sinceros no supe volver el array a las vistas de forma automática.
Así que opté por otra solución más simple: crear un controlador específico para esa acción que llame a una "mini" plantilla también específica para renderizar solamente esa lista de 5 últimos artículos. Una vez creada esa funcionalidad nos encargaremos de renderizarlar donde queramos con la función render de twig. En cualquier plantilla pondremos lo siguiente:
{% render 'MiBundle:Default:ultimasNoticias' with { 'num': 5 } %}
Esto llamará al método ultimasNoticiasAction($num) del controlador Default en el bundle MiBundle, ahí tendremos el código que ejecuta la query, la lógica y llama a nuestra mini vista:
public function ultimasNoticiasAction($num = 5) {
$repoNoticias = $this->getDoctrine()->getEntityManager()->getRepository('MiBundle:Noticias');
$noticias = $repoNoticias->getNoticias($num);
return $this->render('MiBundle:Default:_ultimas.html.twig',
array(
'noticias' => $noticias,
)
);
}
Y tan sólo nos falta definir la "mini" vista _ultimas.html.twig:
<ul>
{% for noticia in noticias %}
<li>{{ noticia.titulo }}</li>
{% endfor %}
</ul>
La "magia" está en la función render de Twig, que nos permite llamar a un controlador desde una vista. Problema resuelto. Ojo porque la sintaxis de esta función cambia desde la versión 2.1 de Symfony (ver más).