首页 > 解决方案 > Symfony 4 - 使用 KnpPaginatorBundle 进行多分页渲染?

问题描述

我正在尝试在同一视图上呈现多个分页。

在我的模板中,我使用标签来分隔我的不同列表,但我希望它们每个都有自己的分页

目前我已经:

控制器.php

public function index(Request $request, PaginatorInterface $paginator)
{

    $productsLines = $stripeAdmin->findAllProducts();
    $products = $paginator->paginate(
        $productsLines,
        $request->query->getInt("page", 1),
        1
    );
    $products->setTemplate("pagination/stripePagination.html.twig");



    $couponsLines = $stripeAdmin->findAllCoupons();
    $coupons = $paginator->paginate(
        $couponsLines,
        $request->query->getInt("page", 1),
        1
    );
    $coupons->setTemplate("pagination/stripePagination.html.twig");

    return $this->render('stripe_admin/index.html.twig', [
        "products" => $products,
        "coupons" => $coupons,
    ]);
}

模板.html.twig:

在每个选项卡中,我都有这个:

产品标签:

<div class="navigation">
    {{knp_pagination_render(products)}}
</div>

优惠券标签:

<div class="navigation">
    {{knp_pagination_render(coupons)}}
</div>

但最后我只有一个被渲染的。

有解决办法吗?

标签: symfonyviewpagination

解决方案


对于希望在同一页面中使用相同模板但具有不同查询参数的任何人,我找到了此解决方案并成功对其进行了测试。

/** pagination 1 */
$pagination1 = $paginator->paginate(
    $queryContent1, /* query NOT result */
    $request->query->getInt("page1", 1)/*page number*/,
    10/*limit per page*/,
    array(
        'pageParameterName' => 'page1',
        'sortFieldParameterName' => 'sort1',
        'sortDirectionParameterName' => 'direction1',
    )
);

/** pagination 2 */
$pagination2 = $paginator->paginate(
    $queryContent2, /* query NOT result */
    $request->query->getInt("page2", 1)/*page number*/,
    10/*limit per page*/,
    array(
        'pageParameterName' => 'page2',
        'sortFieldParameterName' => 'sort2',
        'sortDirectionParameterName' => 'direction2',
    )
);

return $this->render('folder/view.html.twig', array(
    'list1' => $pagination1,
    'list2' => $pagination2
));

在视图中:

{# first #}
{{ knp_pagination_render(list1) }}

{# second #}
{{ knp_pagination_render(list2) }}

推荐阅读