ThinkPHP 的 MVC 架构需明确分工:控制器收参数、调模型、传数据;模型专注数据逻辑与验证;视图仅负责展示;配合路由配置与数据库设置,实现清晰协同。

ThinkPHP 使用 MVC 架构并不难,关键在于理清三者分工、按目录规范组织代码,并让它们真正协同起来——不是各自为政,而是各司其职又紧密配合。
控制器:接收请求并调度任务
控制器是用户请求的第一站,它不直接操作数据库,也不拼HTML,只做三件事:收参数、调模型、传数据给视图。文件放在 app/controller/ 目录下,类名以 Controller 结尾(如 IndexController.php),方法对应具体动作(如 index() 或 list())。
- 用
$this->request->param()获取 GET/POST 参数,比手动写$_GET更安全 - 调用模型时,推荐用依赖注入或
model('User'),避免硬编码 new 实例 - 返回视图统一用
return view('index', $data),其中$data是关联数组,键会变成模板里的变量名
模型:专注数据逻辑与验证
模型封装所有和数据打交道的细节,比如查库、写库、字段校验、关联查询。它位于 app/model/,继承 think\Model,对应一张数据表(默认按类名自动匹配表名,如 User → user)。
- 定义表名用
protected $table = 'users';,避免命名歧义 - 字段验证建议写在模型里,用
validate(true)触发,比控制器里堆 if 判断更清晰 - 复杂业务逻辑不要塞进模型,可拆出 service 类,模型只管“CRUD + 规则”,service 管“怎么算、怎么组合”
视图:纯粹展示,不掺逻辑
视图是最终呈现给用户的 HTML 页面,放在 app/view/ 下,按控制器/方法命名(如 index/index.html)。ThinkPHP 默认用内置模板引擎,支持变量输出、循环、条件判断等,但禁止写 PHP 原生代码(<?php ?>)。
立即学习“PHP免费学习笔记(深入)”;
- 输出变量用
{$name},不是= $name ?> - 循环列表用
{volist name="list" id="vo"}{$vo.title}{/volist},语义明确且防 XSS - 公共头部/底部抽成
include file="public/header",复用更方便
路由与配置:让 URL 更友好
默认访问 /index/index 太长,可通过路由简化。配置在 app/route.php,支持闭包、数组、资源路由等多种方式。
- 基础映射:
Route::get('user/:id', 'index/User/read');表示访问/user/123调用User控制器的read方法 - 开启路由后,记得关闭
url_common配置(在config/app.php中设为 false),否则仍走 pathinfo 模式 - 数据库配置统一写在
config/database.php,用数组返回,字段名必须严格匹配框架要求(如type、hostname、database)



















