如何获取结果总数?——Symfony中Pagerfanta与Twig的使用
获取Pagerfanta分页结果的总数
嘿,这个问题解决起来超简单!Pagerfanta本身就封装好了获取结果总数的方法,不用你额外写统计查询,下面分两种场景给你说明:
1. 在PHP控制器中提前获取总数
你的findAllProductsByCategory方法返回的是Pagerfanta实例,这个实例自带getNbResults()方法,你可以在控制器里调用它拿到总数,再传递给Twig模板:
// 假设这是你的控制器方法 public function listProductsByCategory($category, Request $request) { $page = $request->query->getInt('page', 1); $productRepository = $this->getDoctrine()->getRepository(Product::class); // 调用你的仓库方法获取分页器 $paginator = $productRepository->findAllProductsByCategory($category, $page); // 获取结果总数 $totalProducts = $paginator->getNbResults(); // 把分页器和总数传给Twig return $this->render('products/list.html.twig', [ 'paginator' => $paginator, 'total_products' => $totalProducts, ]); }
2. 在Twig模板中直接调用
你也可以不用在控制器里提前处理,直接在Twig模板中通过魔术属性访问getNbResults()方法的结果:
{# 显示总数 #} <div class="total-count"> 共找到 <strong>{{ paginator.nbResults }}</strong> 个商品 </div> {# 正常循环分页结果 #} {% for product in paginator %} <div class="product-item"> {# 你的商品展示代码 #} <h3>{{ product.name }}</h3> </div> {% endfor %}
补充小提示
Pagerfanta的getNbResults()方法会自动生成并执行优化后的COUNT查询,完全基于你原有的查询条件计算总数,结果绝对准确。对于你说的“少量数据行”,完全不用担心性能问题~
内容的提问来源于stack exchange,提问作者ABSimon
相关产品推荐
相关产品推荐

