ThinkPHP 8 模块全解析

ThinkPHP 8 · 架构解构

ThinkPHP 8 模块全解析

每个目录存在的意义、职责与实战示例。理解结构,就是理解框架的灵魂。

整体目录结构一览

thinkphp8-project/
├── app/ # 应用核心目录
│ ├── controller/ # 控制器
│ ├── model/ # 模型
│ ├── view/ # 视图模板
│ ├── middleware/ # 中间件
│ ├── event/ # 事件
│ ├── service/ # 业务服务层
│ ├── common/ # 公共函数与基类
│ └── AppService.php
├── config/ # 全局配置
├── route/ # 路由定义
├── public/ # 入口与静态资源
├── runtime/ # 运行时缓存/日志
├── vendor/ # Composer 依赖
└── .env # 环境变量

控制器(controller)—— 请求调度中心

接收 HTTP 请求,调用业务逻辑,返回响应。不处理具体业务,只做参数校验与任务派发

// app/controller/User.php namespace app\controller; use app\model\User as UserModel; class User { public function register() { $data = request()->post(); $user = UserModel::create($data); return json(['id' => $user->id]); } }

模型(model)—— 数据与业务核心

封装数据库操作、定义关联与修改器。数据逻辑集中处,一张表对应一个模型

// app/model/User.php class User extends Model { protected $name = 'user'; // 密码自动加密 public function setPasswordAttr($value) { return password_hash($value, PASSWORD_DEFAULT); } // 关联文章 public function articles() { return $this->hasMany(Article::class); } }

视图(view)—— 数据呈现层

存放 HTML 模板,使用原生 PHP 或模板标签渲染变量。控制器将数据传递至此。

<!-- app/view/user/info.html --> <h1>用户:{$user.name}</h1> <p>邮箱:{$user.email}</p> {foreach $user->articles as $article} <div>{$article.title}</div> {/foreach}

中间件(middleware)—— 请求拦截器

在控制器前后执行,用于鉴权、日志、跨域等通用处理,实现切面编程。

// app/middleware/Auth.php class Auth { public function handle($request, Closure $next) { if (!$request->header('Authorization')) { return json(['code'=>401])->code(401); } return $next($request); } }

事件(event)—— 观察者模式

当“用户注册”等动作发生时,自动触发监听器(发邮件、写日志),解耦后续操作

// 在控制器中触发事件 event('UserRegistered', $user); // app/listener/SendWelcomeEmail.php class SendWelcomeEmail { public function handle($user) { mail($user->email, '欢迎', '感谢注册'); } }

服务层(service)—— 复杂业务协调者

非框架强制,但强烈推荐。封装跨模型的复杂逻辑,让控制器保持轻薄优雅

// app/service/OrderService.php class OrderService { public function create($userId, $productId) { $product = Product::find($productId); $product->stock -= 1; $product->save(); return Order::create([...]); } }

配置目录(config)—— 集中参数管理

数据库、缓存、应用等所有可调参数均在此定义,支持 .env 环境变量覆盖

// config/database.php return [ 'default' => env('database.driver', 'mysql'), 'connections' => [ 'mysql' => [ 'hostname' => env('database.hostname', '127.0.0.1'), 'database' => env('database.database', 'tp8'), ] ] ];

路由(route)—— URL 到逻辑的映射

定义优雅的 URL 规则,支持分组、中间件绑定和资源路由。让接口清晰可控

// route/app.php Route::get('user/:id', 'User/info'); Route::post('user/register', 'User/register'); Route::group('admin', function () { Route::resource('article', 'Admin/Article'); })->middleware(Auth::class);

public 目录 —— 唯一对外窗口

存放 index.php 入口文件和 CSS/JS 等静态资源。所有 HTTP 请求都指向这里,保证核心代码安全

runtime —— 系统运行痕迹

存放编译文件、缓存、日志、Session 等。需可写权限,是框架高效运行的临时仓库

vendor 与 extend —— 第三方与自定义扩展

vendor:Composer 管理的依赖库,不可手动修改。
extend:自定义非 Composer 类库,遵循 PSR-4 即可自动加载。

一次请求的完整协作流程

public/index.php 启动框架 → 路由 匹配到控制器方法 → 执行 中间件(鉴权) → 控制器 调用 模型/服务 处理业务 → 数据交给 视图 渲染 → 返回 HTML/JSON 给浏览器。

这正是 ThinkPHP 8 践行 MVC 分层架构、实现高内聚低耦合的核心路径。

本站所有文章、数据、图片来源于网络,仅供学习使用,如有侵权,联系删除!

推荐资讯

热门标签

广告
YznCMS后台开发框架
后台框架永久免费且商业授权无限制
立即查看

资源下载