Php 带findAll()方法的Knp分页器
我有一个问题,knp paginator只能这样工作:Php 带findAll()方法的Knp分页器,php,symfony,doctrine-orm,pagination,knppaginator,Php,Symfony,Doctrine Orm,Pagination,Knppaginator,我有一个问题,knp paginator只能这样工作: $em = $this->get('doctrine.orm.entity_manager'); $dql = "SELECT a FROM MainArtBundle:Art a"; $query = $em->createQuery($dql); $paginator = $this->get('knp_paginator'); $pagination = $pa
$em = $this->get('doctrine.orm.entity_manager');
$dql = "SELECT a FROM MainArtBundle:Art a";
$query = $em->createQuery($dql);
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$query,
$this->get('request')->query->get('page', 1) /*page number*/,
8 /*limit per page*/
);
但不是这样:
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('MainArtBundle:Art')->findAll();
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$entities,
$this->get('request')->query->get('page', 1) /*page number*/,
/*limit per page*/
);
为什么是这样?我不明白
这是我的电话:
<li>{{ knp_pagination_sortable(paginator, 'Oldest', 'a.id', {'direction': 'desc'}) }}</li>
{{knp_pagination_sortable(paginator,'Oldest','a.id',{'direction':'desc'}}}
问候MichaelFindAll返回一个数组。knp分页器需要一个条令查询对象。knp不支持数组元素的排序,如前所述 在数据库级别更好地提取和排序数据。在第二个示例中,从表中获取所有数据(可以更大),然后请求分页器限制这些数据。这不太好。因此,最好使用查询来完成这项工作,并让我们管理paginator元素 目前KNP分页器可以分页:
数组
条令\ORM\Query
条令\ORM\QueryBuilder
Doctrine\ODM\MongoDB\Query\Query
Doctrine\ODM\MongoDB\Query\Builder
-任何条令关系集合,包括条令\Common\Collection\ArrayCollection
-推进ORM查询ModelCriteria
- 包含
和Solarium\u客户端
作为元素的数组Solarium\u查询\u选择
$query=$em->getRepository('Acme\FOOBundle\Entity\BAR')->findAll();
$paginator=$this->get('knp_paginator');
请求=$paginator->paginate(
$query,
$this->get('request')->query->get('page',1),
5.
);代码>您可以尝试以下方法:
$query = $repository->createQueryBuilder('a');
你也可以试试这个:
public function index(PaginatorInterface $paginator, Request $request): Response
{
$properties = $paginator->paginate(
$this->repository->findAllVisibleQuery(),
$request->query->getInt('page', 1),
10
);
return $this->render('pages/property.html.twig',[
'current_menu'=> 'properties',
'properties'=> $properties
]);
}
同样,使用简单的findAll()方法也不可能做到这一点?简单的回答是不,你不能。您需要创建自己的存储库方法。当前paginator可以对各种类型进行分页,请参阅详细信息knp paginator甚至不支持普通数组吗?我从一个存储过程中获取数据,然后返回一个数组。是否也可以对一个简单的字符串进行分页?我添加了有关可以分页的文档参考。如果您有一个字符串数组,则是:您可以对其进行分页。你能提供更多关于你的问题的信息吗?同样,不可能像一本书那样简单地对一个长字符串进行分页?那么ajax是什么呢?对于一个ajax分页的站点来说,最简单的工作流是如何使用条令查询调用的?我不想有一个完整的教程,只有如何接近。。。谢谢。knp paginator甚至不支持普通数组吗?我从一个存储过程中获取数据,然后返回一个数组。Hi@adiii4是的,当然是列表的第一个。基于knp特性(knp分页可排序)的动态排序可能会有问题,我也有同样的问题。如果不建立某种新的查询,我无法直接分页实体。我的意思是,我已经有了我喜欢的查询和实体用法,我只是想向其中添加paginate,而文档只显示了如何以一种方式进行。。正如你的问题所表明的。。奇怪的是,在我的例子中,这一错误是逐渐形成的,这是非常错误的。。我想把它添加到这个主题中,因为搜索能力试图在类“Symfony\Component\HttpFoundation\JsonResponse”上调用方法“getTemplate”。(500内部服务器错误)
在第56行的vendor/knplabs/knp paginator bundle/Twig/Extension/PaginationExtension.php中,
$template?:$pagination->getTemplate(),