本文概述
- 1.安装和配置KnpPaginatorBundle
- 2.在控制器中配置分页器
- 3.在Twig视图中创建分页器
- Array
- 原则\ ORM \查询
- 主义\ ORM \ QueryBuilder
- 教义\ ODM \ MongoDB \ Query \ Query
- 主义\ ODM \ MongoDB \ Query \ Builder
- 教义\ ODM \ PHPCR \ Query \ Query
- 主义\ ODM \ PHPCR \ Query \ Builder \ QueryBuilder
- Doctrine \ Common \ Collection \ ArrayCollection-任何教义关系集合, 包括
- ModelCriteria-推进ORM查询
- 以Solarium_Client和Solarium_Query_Select为元素的数组
1.安装和配置KnpPaginatorBundleKnpPaginatorBundle是Symfony的软件包, 允许你使用SEO友好的Symfony分页器对所有内容进行分页。该实用程序:
- 不需要初始化特定的适配器
- 可以按任何需要的方式进行自定义, 等等:分页视图, 事件订阅者。
- 可以根据请求参数添加自定义过滤, 排序功能。
- 关注点分离, 分页器仅负责生成分页视图, 即分页视图-用于表示目的。
composer require knplabs/knp-paginator-bundle
这将安装捆绑软件并将其自动注册到app / config / bundles.php文件中。有关此软件包的更多信息, 请访问Github上的官方存储库。
安装软件包后, 只需在app / config / packages目录中创建分页器的配置文件。该文件是knp_paginator.yaml, 其中包含此实用程序的配置。该配置由你决定, 但是你可以使用文档提供的默认配置:
# config/packages/paginator.yamlknp_paginator:page_range: 5# number of links showed in the pagination menu (e.g: you have 10 pages, a page_range of 3, on the 5th page you'll see links to page 4, 5, 6)default_options:page_name: page# page query parameter namesort_field_name: sort# sort field query parameter namesort_direction_name: direction# sort direction query parameter namedistinct: true# ensure distinct results, useful when ORM queries are using GROUP BY statementsfilter_field_name: filterField# filter field query parameter namefilter_value_name: filterValue# filter value query paameter nametemplate:pagination: '@KnpPaginator/Pagination/sliding.html.twig'# sliding pagination controls templatesortable: '@KnpPaginator/Pagination/sortable_link.html.twig' # sort link templatefiltration: '@KnpPaginator/Pagination/filtration.html.twig'# filters template
保存文件, 清除项目的缓存。
2.在控制器中配置分页器【如何在Symfony 4中安装KnpPaginatorBundle来对学说进行分页】安装并配置了插件后, 其用法非常简单。只需确保你的控制器扩展了Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller类, 这是允许你使用该类的get方法访问多个服务的类。只需实例化分页器并将其保留在变量上, 然后创建一些Doctrine查询(重要查询, 而非结果), 然后从分页器调用paginate方法并提供其3个必需参数:
- 教义查询
- 当前页面, 由get参数” page” 定义, 并在该参数不存在时将第一页设置为默认页面。
- 每页的项目限制。
<
?phpnamespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\Appointments;
// Include paginator interfaceuse Knp\Component\Pager\PaginatorInterface;
class DefaultController extends AbstractController{// Include the paginator through dependency injection, the autowire needs to be enabled in the projectpublic function index(Request $request, PaginatorInterface $paginator){// Retrieve the entity manager of Doctrine$em = $this->
getDoctrine()->
getManager();
// Get some repository of data, in our case we have an Appointments entity$appointmentsRepository = $em->
getRepository(Appointments::class);
// Find all the data on the Appointments table, filter your query as you need$allAppointmentsQuery = $appointmentsRepository->
createQueryBuilder('p')->
where('p.status != :status')->
setParameter('status', 'canceled')->
getQuery();
// Paginate the results of the query$appointments = $paginator->
paginate(// Doctrine Query, not results$allAppointmentsQuery, // Define the page parameter$request->
query->
getInt('page', 1), // Items per page5);
// Render the twig viewreturn $this->
render('default/index.html.twig', ['appointments' =>
$appointments]);
}}
现在, 你返回了分页结果, 你可以在Twig视图中访问该对象, 该对象将作为对控制器中此操作的响应而呈现。
3.在Twig视图中创建分页器如上一步所示, 我们将分页对象发送到了Twig视图, 该视图呈现了分页滑块和项目。在我们的示例中, Twig视图的内容如下:
{# ./templates/default/index.html.twig #}<
!DOCTYPE html>
<
html>
<
head>
<
meta charset="UTF-8">
<
title>
My Application<
/title>
<
/head>
<
body>
<
ul>
{% for appointment in appointments %}<
li>
{{ appointment.title }}<
/li>
{% endfor %}<
/ul>
<
div class="navigation">
{{ knp_pagination_render(appointments) }}<
/div>
<
/body>
<
/html>
如控制器中所示, 这将在每个页面上生成5个项目的列表。 knp_pagination_render函数使用项目的所有可用页面呈现一个滑块。当单击每个生成的链接时, 还将使用具有所有查询参数的相同URL, 新参数即页面, 该页面指示我们的控制器哪些项目返回视图。
编码愉快!
推荐阅读
- 如何在PHP中创建数字的缩写
- 如何解决PHPExcel致命错误(带有消息”无法关闭zip”的未捕获异常” PHPExcel_Writer_Exception”)
- 如何在XAMPP 3.3.2中为Symfony 4项目配置虚拟主机
- 如何通过PHP中的十六进制代码检索颜色的人名
- 如何将嵌套的PHP数组转换为CSS,SASS,LESS规则(字符串)
- 如何在PHP中将日期时间四舍五入到最接近的10或5分钟
- 使用PHP将字节转换为人类可读的值(KB,MB,GB,TB,PB,EB,ZB,YB)
- 如何在Linux中获取和显示目录大小
- Android蓝牙BLE我可以修改哪些连接的配置参数