Symfony 4 - 使用 KnpPaginatorBundle 进行多分页渲染?

Posted

技术标签:

【中文标题】Symfony 4 - 使用 KnpPaginatorBundle 进行多分页渲染?【英文标题】:Symfony 4 - Multiple pagination render with KnpPaginatorBundle? 【发布时间】:2020-02-05 13:44:15 【问题描述】:

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

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

目前我已经:

Controller.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,
    ]);

template.html.twig:

在每个标签中,我都有这个:

产品标签:

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

优惠券标签:

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

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

有解决办法吗?

【问题讨论】:

看起来您在分页查询字符串中具有相同的变量名称。 $request-&gt;query-&gt;getInt("page", 1) 用于产品和优惠券。使用不同的名称 @Cid 不应影响 knppaginator。但看起来问题出在视图部件上。你检查过你的浏览器吗? 是的,我检查了浏览器并确认分页元素只呈现一次 编辑:好的,如果我为页面使用不同的名称,它会起作用!谢谢! 【参考方案1】:

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

/** 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) 

【讨论】:

以上是关于Symfony 4 - 使用 KnpPaginatorBundle 进行多分页渲染?的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 4 API 平台和 JWT:如何使用 Symfony 客户端项目登录 API?

在 Symfony 4.4 中使用 RedisTagAwareAdapter

为啥要安装 symfony 版本 4? [复制]

Symfony 4 - Webpack-encore 使用 FosJsRouting :路由未定义

Symfony 4 - 使用 KnpPaginatorBundle 进行多分页渲染?

在 Symfony 4.4 中使用注解测试控制器