我安装了"Kpp寻呼器";一切都很好,但如果我试图在搜索栏中进行搜索(这个搜索栏不依赖于Kpp Paginator(,我会出现以下错误:
"Knap\Bundle\PaginatorBundle\Twig\Extension\PaginationExtension::render((:参数#2($pagination(的类型必须是Knap\PBundle\PiaginatorBundle\pagination\SlidingPaginationInterface,给定数组,在…/var/cache/dev/twick/36/36da62d992e743004744882a10f47b6d89340c107d735e823c151b7c459ca09f.php中调用;=>请参阅图片。
如果我禁用KnpPaginator,搜索栏将再次工作。
谢谢你的帮助。
这是我的queryBuilder搜索栏(ItemRepository(:
public function findBySearch($search)
{
return $this->createQueryBuilder('a')
->andWhere('a.city LIKE :val')
->setParameter('val', '%' . $search . '%')
->orWhere('a.title LIKE :title')
->setParameter('title', '%' . $search . '%')
->orWhere('a.city LIKE :city')
->setParameter('city', '%' . $search . '%')
->orWhere('a.zipCode LIKE :zip')
->setParameter('zip', '%' . $search . '%')
->orWhere('a.hiddenDetail LIKE :hiddenDetail')
->setParameter('hiddenDetail', '%' . $search . '%')
->getQuery()
->getResult();
}
控制器(搜索栏(:
/**
*@Route("/searchItem", name="searchItem")
*
*/
public function searchItem(Request $request, ItemRepository $itemRepository)
{
$search = $request->request->get('search');
$items = $itemRepository->findBySearch($search);
return $this->render('home/listItem.html.twig', [
'items' => $items
]);
}
控制器(Knp传呼机(:
public function listItem(ItemRepository $repository, PaginatorInterface $paginator, Request $request): Response
{
$data = $repository->findAll();
// PAGINANTION KNP/PAGINATOR
$items = $paginator->paginate(
$data,
$request->query->getInt('page', 1),
8
);
return $this->render('home/listItem.html.twig', [
'items' => $items,
]);
}
KNP正在接收来自findAll()
函数的数组。您需要编写一个自定义的repo函数来返回查询生成器本身,KNP将用任何额外的必需品为您完成查询。
参见https://symfonycasts.com/screencast/symfony4-doctrine-relations/pagination
我的努力卓有成效。
编辑:另外,我会再看一眼你的andWhere()
。你可以一次为所有这些设置一个参数,如果这对你的情况有效的话,只需重用搜索词。
public function findBySearch($search)
{
return $this->createQueryBuilder('a')
->andWhere('
a.city LIKE :val
OR a.title LIKE :val
OR a.city LIKE :val
OR a.zipCode LIKE :val
OR a.hiddenDetail LIKE :val')
->setParameter('val', '%'.$search.'%')
->getQuery()
->getResult();
// if you want to use the paginator, leave these last two
// lines off. Return just the qb.
}