ThinkPHP项目五大核心目录为app、public、config、route、runtime:app存业务代码且命名空间为App\,public是唯一Web入口和静态资源目录,config自动加载全局配置,route负责URL路由映射,runtime需可写以支持缓存与日志。

五大核心目录及其职责
一个标准 ThinkPHP(6/8)项目根目录下,以下五个目录不可删、不可挪、必须理解其作用:
-
app/:应用逻辑主目录,存放控制器、模型、中间件、服务类等。所有类文件遵循 PSR-4 规范,命名空间默认为
app\;模块目录(如admin、api)必须全小写。 -
public/:Web 唯一可访问入口目录,含
index.php、静态资源(CSS/JS/IMG)和.htaccess(Apache)或 Nginx 配置所指向的位置;服务器运行目录必须设为此处。 -
config/:集中管理配置文件(
database.php、cache.php、route.php等),框架启动时自动加载;绝不能放在public/下,否则数据库密码等敏感信息可能被直接访问。 -
route/:定义 URL 路由映射,常见文件有
app.php(应用级路由)、api.php(API 路由),支持分组与中间件绑定。 - runtime/:运行时生成目录,存放缓存、日志、模板编译文件等;部署时需确保 Web 服务器对该目录有读写权限,否则路由缓存无法生成、错误日志无法记录。
app/ 目录内部命名规范
这个目录最容易出错,关键在于“哪些必须小写、哪些必须驼峰”:
- 模块目录名(如
index、admin、user)必须全小写,不支持驼峰或下划线以外的字符——它们是路由分组标识,参与 URL 解析。 - 子目录名(
controller、model、middleware、service、view)必须全小写,框架默认只认这些名称。 - 类文件名必须首字母大写 + 驼峰,且与类名完全一致,例如
UserLoginService.php内必须声明class UserLoginService。 - 控制器类必须继承
think\Controller,模型类推荐继承think\Model,否则容器注入和查询构造器可能失效。
其他重要目录与注意事项
除五大核心目录外,还有几个常出现且需明确用途的目录:
- vendor/:Composer 依赖包目录,不应手动修改;框架核心和第三方库均由此加载。
-
extend/:用于存放自定义扩展类库,可按需组织,但需在
composer.json中注册自动加载规则。 -
view/(部分版本)或
app/view/(TP6+):视图模板存放位置;多应用模式下,每个模块可拥有独立view子目录。 - build.php(可选):用于自动生成目录结构或模块骨架,非必需但提升开发效率。
多应用与模块化组织方式
当项目需要区分后台、前台、API、小程序等场景时,应采用多应用或模块化结构:
立即学习“PHP免费学习笔记(深入)”;
- 多应用模式下,在
app/下建多个小写目录(如admin、api),每个目录内保持完整子结构(controller、model等)。 - 各应用可拥有独立配置(
app/admin/config/)、路由(app/admin/route.php)和视图(app/admin/view/)。 - 需在入口文件或配置中启用多应用支持,并正确设置
app_namespace和APP_BASE_PATH。



















