0

0

PHP分页怎么用MVC模式写_PHP的MVC架构分页实现【详解】

雪夜

雪夜

发布时间:2026-02-16 14:58:02

|

610人浏览过

|

来源于php中文网

原创

php mvc分页需解耦查询、页码逻辑与渲染:url参数经请求对象安全提取并校验;模型提供getitems()和gettotalcount()方法;控制器组装分页上下文数组传给视图;视图用预构建链接安全渲染,处理空结果边界情况。

php分页怎么用mvc模式写_php的mvc架构分页实现【详解】

PHP分页在MVC中不是“套个模板就能跑”,关键在于把数据查询、页码逻辑、视图渲染三者解耦,同时避免在控制器里拼SQL或在模型里写HTML。

分页参数怎么从URL传到控制器

用户点击 /list?page=3&per_page=10 时,pageper_page 必须被安全提取。不要用 $_GET 直接取值,而是通过路由或请求对象统一处理:

  • page 默认为 1,必须是正整数,否则强制设为 1
  • per_page 应限制范围(如 5–50),防止恶意传 per_page=999999 导致全表扫描
  • 注意 URL 中可能带其他参数(如搜索关键词),分页链接需保留它们,不能只写 ?page=2

模型层怎么返回分页所需的数据和总数

模型不该返回完整数据集,而应提供两个方法:getItems()getTotalCount()。两者共用同一套 where 条件,但后者只查 COUNT(*)

public function getItems($offset, $limit, $conditions = [])
{
    $sql = "SELECT * FROM posts WHERE status = ? ORDER BY created_at DESC LIMIT ? OFFSET ?";
    return $this->db->fetchAll($sql, [1, $limit, $offset]);
}
<p>public function getTotalCount($conditions = [])
{
$sql = "SELECT COUNT(*) FROM posts WHERE status = ?";
return (int) $this->db->fetchValue($sql, [1]);
}

别在一个查询里用 LIMIT + SQL_CALC_FOUND_ROWS —— MySQL 8.0 已弃用,且在高并发下不准。

Pixlr Remove BG
Pixlr Remove BG

几秒钟删除图片背景

下载

立即学习PHP免费学习笔记(深入)”;

控制器怎么组装分页上下文并交给视图

控制器负责把原始参数转成视图能直接用的结构,比如:

  • 当前页 $currentPage
  • 每页条数 $perPage
  • 总条数 $totalCount
  • 总页数 $totalPages = ceil($totalCount / $perPage)
  • 上一页/下一页链接(含所有保留参数)

别把生成页码 HTML 的逻辑放在控制器里。传给视图的应该是一个数组,例如:

$pagination = [
    'current' => $currentPage,
    'per_page' => $perPage,
    'total' => $totalCount,
    'pages' => range(1, $totalPages),
    'prev_url' => $this->buildUrl(['page' => max(1, $currentPage - 1)]),
    'next_url' => $this->buildUrl(['page' => min($totalPages, $currentPage + 1)]),
];

视图里怎么安全渲染分页链接

视图只做两件事:循环显示数据、按 $pagination 渲染页码栏。重点是 URL 构建必须编码参数值,防止 XSS:

  • htmlspecialchars() 处理所有输出到 HTML 的变量,包括 $page 和链接中的查询参数
  • 不要手拼 <a href="?page=%E2%80%A6%EF%BC%8C%E8%80%8C%E6%98%AF%E7%94%A8%E9%A2%84%E6%9E%84%E5%BB%BA%E5%A5%BD%E7%9A%84%20%24pagination['prev_url']%20%E7%AD%89%E5%AD%97%E6%AE%B5
  • %E9%A1%B5%E7%A0%81%E6%95%B0%E5%AD%97%E8%BF%87%E5%A4%9A%E6%97%B6%EF%BC%88%E6%AF%94%E5%A6%82%20100%20%E9%A1%B5%EF%BC%89%EF%BC%8C%E5%88%AB%E5%85%A8%E5%88%97%E5%87%BA%E6%9D%A5%EF%BC%8C%E8%A6%81%E5%8A%A0%E7%9C%81%E7%95%A5%E9%80%BB%E8%BE%91%EF%BC%88%E5%A6%82%201%20%E2%80%A6%205%206%207%208%209%20%E2%80%A6%20100%EF%BC%89%E2%80%94%E2%80%94%20%E8%BF%99%E9%83%A8%E5%88%86%E5%8F%AF%E6%8A%BD%E6%88%90%E4%B8%80%E4%B8%AA%E7%8B%AC%E7%AB%8B%E7%9A%84%20PaginationRenderer%20%E7%B1%BB%EF%BC%8C%E4%BD%86%E4%B8%8D%E5%B1%9E%E4%BA%8E%E6%A8%A1%E5%9E%8B%E6%88%96%E6%8E%A7%E5%88%B6%E5%99%A8%E8%81%8C%E8%B4%A3

%E6%9C%80%E5%B8%B8%E8%A2%AB%E5%BF%BD%E7%95%A5%E7%9A%84%E6%98%AF%EF%BC%9A%E5%BD%93%20%24totalCount%20===%200%20%E6%97%B6%EF%BC%8C%24totalPages%20%E4%BC%9A%E6%98%AF%200%EF%BC%8Crange(1,%200)%20%E8%BF%94%E5%9B%9E%E7%A9%BA%E6%95%B0%E7%BB%84%EF%BC%8C%E9%A1%B5%E7%A0%81%E6%A0%8F%E7%9B%B4%E6%8E%A5%E6%B6%88%E5%A4%B1%E2%80%94%E2%80%94%E8%BF%99%E6%B2%A1%E9%97%AE%E9%A2%98%EF%BC%8C%E4%BD%86%E5%BE%97%E7%A1%AE%E4%BF%9D%E5%89%8D%E7%AB%AF%E4%B8%8D%E5%9B%A0%E6%AD%A4%E6%8A%A5%E9%94%99%E6%88%96%E7%95%99%E7%99%BD%E5%BC%82%E5%B8%B8%E3%80%82

%0A">

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

963

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

334

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

375

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1676

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

370

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1232

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

583

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

435

2024.04.29

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

145

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.9万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号