Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Múltiples paginaciones con KnpPaginator en misma route

19 de febrero de 2016

Estoy empleando el bundle KnpPaginator para paginar unas búsquedas.

Tengo una ruta principal /posts desde donde renderizo una plantilla:

/**
* @Route("/posts", name="blog_posts")
*/
public function listPostsAction()
{
   return $this->render('backend/posts/listposts.html.twig');
}

En la plantilla listposts.html.twig renderizo varios controllers dependiendo de las búsquedas:

{{ render(controller('AppBundle:Search:searchWordAndCategory', {
    'request': app.request, 'word': word, 'category': category
})) }}
 
{{ render(controller('AppBundle:Search:searchCategory', {
    'request': app.request, 'category': category
})) }}

Cada controlador tiene una paginación específica, por ejemplo en el controlador de buscar posts en una categoría:

$pagination = $this->paginate($posts, 15, $request->query->getInt('pagec', 1),
array('pageParameterName' => 'pagec'));

Y queda algo como /posts?pagec=1, /posts?pagec=2, ... Pero el paginador no detecta los parámetros. La URL aparece con los nuevos parámetros pero no se pasan al paginador, muestra los resultados de /posts. Además, si busco de nuevo con otro controlador, el parámetro se añade al anterior: /posts?pagec=2&pagew=1

La idea es desde una misma ruta hacer paginaciones diferentes desde diferentes controllers, pero no consigo pasar el parámetro al paginador y que no se mantengan los parámetros de las anteriores búsquedas.

Al mostrar la paginación, veo desde la configuración del método knp_pagination_render que su tercer argumento es un array llamado $queryParams, pero no se si van por ahí los tiros. He intentado algo así sin éxito:

{{ knp_pagination_render(pagination, null, app.request.attributes) }}

Respuestas

#1

Yo uso Pagerfanta en vez de KnpPaginator, pero por lo que dices, la solución podría ser pasar los parámetros de búsqueda a cada paginador. Algo así:

{{ knp_pagination_render(pagination, null, { pagec: 3 }) }}
 
{{ knp_pagination_render(pagination, null, { pagew: 2 }) }}

@javiereguiluz

19 febrero 2016, 8:33
#2

Gracias Javier,

finalmente he optado por Pagerfanta, empleando una implementación similar a la que explican en KnpUniversity

@diegotham

22 febrero 2016, 12:23