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
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
Gracias Javier,
finalmente he optado por Pagerfanta, empleando una implementación similar a la que explican en KnpUniversity
@diegotham