Symfony控制器中如何获取搜索查询的结果总数?
解决KnpPaginator获取搜索总结果数的问题
嘿,你遇到的错误根源很清晰——你直接把整个SlidingPagination对象传给了setResultsqty()方法,但这个方法需要接收数字类型的参数,所以才会抛出"对象无法转换为字符串"的错误。
从你提供的Twig Dump信息能看到,SlidingPagination对象里确实用#totalCount私有属性存储了总结果数,但私有属性不能直接通过数组方式(比如$pagination['totalCount'])或者直接访问($pagination->totalCount)获取,必须用类提供的公共getter方法。
修复步骤:
- 使用KnpPaginator官方提供的
getTotalItemCount()方法,这是SlidingPagination类专门用来获取总结果数的公共方法。 - 修改你代码里的错误行:
// 原来的错误代码 $searchmetrics->setResultsqty($pagination); // 替换为正确写法 $searchmetrics->setResultsqty($pagination->getTotalItemCount());
修改后的完整控制器代码:
public function fpcAction(Request $request) { $query = $request->query->get('q'); $finder = $this->container->get('fos_elastica.finder.app.product'); $page = $request->query->getInt('page', 1); $paginator = $this->get('knp_paginator'); $results = $finder->createPaginatorAdapter($query); $pagination = $paginator->paginate($results, $page, 12); $searchmetrics = new SearchTerms(); $searchmetrics->setSearchterm($query); $searchmetrics->setDate(time()); // 正确获取并赋值总结果数 $searchmetrics->setResultsqty($pagination->getTotalItemCount()); $entityManager = $this->getDoctrine()->getManager(); $entityManager->persist($searchmetrics); $entityManager->flush(); return $this->render('default/search.html.twig', ['searchresults' => $pagination, 'query' => $query]); }
额外验证小技巧:
如果你对方法返回值存疑,可以临时添加调试代码确认:
dump($pagination->getTotalItemCount()); // 应该输出类似8104的数字 die;
这样就能顺利把搜索结果的总数存储到数据库里了~
内容的提问来源于stack exchange,提问作者coreyg
相关产品推荐
相关产品推荐

