mvc模式通过强制分离model(只管数据)、controller(只做调度)、view(纯模板)三层职责,解决php网站代码混乱、修改易崩、协作困难等实际问题。

PHP网站搭建用MVC不是为了“看起来专业”,而是解决实际问题:代码越写越乱、改一处崩一片、加新功能要重读全部逻辑。它通过强制分离数据、控制和展示三块职责,让项目真正可维护、可协作、可上线。
Model 层:只管数据,不碰业务规则以外的事
模型不是数据库操作的简单封装,而是业务数据的抽象。比如用户注册,Model只做两件事:把合法数据存进数据库,从数据库取出结构化数据。密码加密、邮箱格式校验这些属于业务逻辑,应放在Controller里判断后再传给Model;权限检查、跳转逻辑、错误提示更不能出现在Model中。
- 用PDO预处理语句,杜绝字符串拼接SQL(这是安全底线)
- 每个Model类对应一张核心表,方法名体现意图(如
findByEmail()、activateAccount()),不用通用query() - 数据库连接建议单例复用,避免每次new PDO造成资源浪费
Controller 层:只做调度,不写HTML也不查库
控制器是请求的“中转站”,不是“万能胶”。它接收URL参数或表单数据,调用Model获取/修改数据,再把结果交给View——全程不输出HTML,不直接连数据库,不处理前端样式。
- 动作方法(如
showProfile())应轻量:取参 → 调Model → 组装数组 →render('profile', $data) - 禁止在View里include或new Model,所有数据必须由Controller显式传递
- 错误处理统一在Controller完成:验证失败就带错误信息返回原View;查询为空就设空数组或抛异常,别让View去判断
if (!$user)
View 层:纯模板,只负责“怎么画”,不管“画什么”
视图文件本质是带PHP变量的HTML,不是脚本。它不该有if判断业务状态(如“是否已登录”该由Controller决定渲染哪个View),也不该有循环查库(如foreach (getComments() as $c))。
- 用简单
<?php echo htmlspecialchars($name); ?>输出,防XSS;禁用extract(),避免变量污染 - 路径严格限定:如
views/user/edit.php,不接受用户输入拼路径(防任意文件读取) - 复用靠包含(
include 'header.php')或布局模板,而非复制粘贴HTML
路由与入口:让URL真正驱动流程
没有合理路由,MVC就是文件夹分类游戏。Apache需开启mod_rewrite,.htaccess把所有非静态资源请求重写到index.php;PHP入口则解析URL路径,映射为控制器和动作。
- URL示例:
/article/detail/123→ 控制器ArticleController,动作detailAction(),参数$id = 123 - 控制器名、动作名必须白名单校验或正则过滤(如
preg_replace('/[^a-zA-Z0-9_]/', '', $controller)),防路径遍历 - 默认控制器(如
HomeController)和默认动作(如indexAction)要明确设定,避免404泛滥
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











