Buenas, lo he resuelto de la siguiente manera, a lo mejor a alguien le puede servir, aunque seguramente haya una manera más eficaz.
Controller
Código:
public function indexAction($page)
{
$latestBlogs = $this->getDoctrine()
->getEntityManager()
->getRepository('BloggerBlogBundle:Blog')
->getLatestBlogs($page, 5 );
return $this->render('BloggerBlogBundle:Page:index.html.twig', array(
'blogs' => $latestBlogs
));
}
Repository
Código:
public function getLatestBlogs($page = 1, $limitPerPage = 5)
{
$dql = $this->getEntityManager()->createQuery('SELECT b, c FROM BloggerBlogBundle:Blog b LEFT JOIN b.comments c');
//...
$count = Paginate::getTotalQueryResults($dql); // Step 1
if ( $page == 1 ) {
$offset = 0;
}
if ( $page == 2 ) {
$offset = 5;
}
$paginateQuery = Paginate::getPaginateQuery($dql, $offset, $limitPerPage);
return $paginateQuery->getResult();
}
Routing
Código:
BloggerBlogBundle_homepage:
pattern: /{page}
defaults: { _controller: BloggerBlogBundle:Page:index, page:1 }
requirements:
_method: GET
Template
Código:
<div>
<a href="{{ path('BloggerBlogBundle_homepage', { 'page': 1 }) }}">1</a> || <a href="{{ path('BloggerBlogBundle_homepage', { 'page': 2 }) }}">2</a>
</div>
He puesto el número de páginas a mano (1 y 2, con 5 resultados por página) supongo que con el total de resultados de la consulta, divido por el número de resultados por página a mostrar, se puede obtener la paginación de manera genérica
Saludos y gracias de nuevo masterpuppet