必须用composer create-project生成thinkphp6标准目录结构,该命令一次性创建app/、public/、runtime/、think脚本等完整骨架;若用composer require则缺失关键文件,导致class 'thinkpp' not found等错误。

composer create-project 生成的目录结构是唯一标准
ThinkPHP 6 的目录结构不是靠手动创建或复制粘贴定义的,而是由 composer create-project topthink/think 命令一次性生成的完整项目骨架。任何跳过这步、改用 composer require topthink/think 的方式,都会缺失 app/、public/、runtime/、think 命令脚本等关键目录和文件,后续必然出现 Class 'thinkApp' not found 或 require(): Failed opening required 'base.php'。
生成后根目录下必有的核心目录包括:
• app/:默认单应用入口,含 controller/、model/、view/ 等子目录
• config/:全局配置,如 app.php、database.php
• public/:Web 入口目录,必须作为 Web 服务器的文档根(DocumentRoot)
• runtime/:运行时目录,需可写(Linux/macOS 下常设为 777 或属组可写)
• vendor/:TP6 核心已移入此处,路径为 vendor/topthink/think/src/,不再有 vendor/thinkphp/
多应用模式下 app/ 子目录不能手建,必须用 php think build
TP6 多应用不是靠“在 app/ 下新建 admin/ 文件夹”实现的。手动创建 app/admin/ 后,类自动加载不注册、命名空间不生效、路由无法识别——因为缺少 app/admin/config/、app/admin/common.php 等配套结构,且 Composer 的 PSR-4 映射不会自动包含该路径。
正确做法是:
• 在项目根目录新建 build.php,内容类似:
return [
'admin' => ['controller', 'model', 'view', 'config', 'common.php'],
'api' => ['controller', 'model', 'config'],
];
• 执行
php think build --config build.php• 自动生成带完整命名空间、自动加载注册、基础配置继承的
app/admin/ 和 app/api/• 紧接着运行
composer dump-autoload -o 确保新路径生效
public/ 是硬性 Web 入口,.env 和 runtime 权限容易被忽略
部署时最常因路径错误导致 404 或敏感文件泄露:.env 若暴露在 Web 可访问路径下,数据库密码直接可见;runtime/ 不可写则日志、模板缓存、Session 文件全部失败,页面可能空白且无报错提示。
必须确认:
• Web 服务器(Nginx/Apache)的 root 指向 public/,不是项目根目录
• Apache 需启用 mod_rewrite,且 public/.htaccess 未被主机禁用
• Nginx 需配置 try_files $uri $uri/ /index.php?$query_string;
• Linux/macOS 下执行 chmod -R 777 runtime/(开发环境),生产环境建议用属组 + g+w 更安全
• .env 中 APP_DEBUG=false 和 APP_ENV=production 必须生效,否则错误堆栈直接打在页面上
vendor/autoload.php 加载失败本质是 autoload 配置断裂
报 Class 'thinkContainer' not found 或 require(): vendor/autoload.php failed,90% 不是文件丢了,而是自动加载链断了。
排查顺序应是:
• 运行 php think version:若提示 Command "version" is not defined,说明 think 命令没进 autoload —— 基本等于没走 create-project
• 检查 composer.json 中 "autoload" 段是否含 "psr-4": {"think\": "vendor/topthink/think/src/"}(新版 TP6 自带,但手动改过可能被删)
• 删掉 vendor/ 和 composer.lock,重跑 composer install --no-dev
• 别在 public/index.php 里写死 require __DIR__.'/../../vendor/autoload.php' —— 相对路径 require __DIR__.'/../vendor/autoload.php' 才可靠
真正难调试的点不在目录生成,而在多应用间的配置合并逻辑和运行时目录权限的隐式依赖——比如 app/admin/config/database.php 会覆盖全局同名配置,但中间件注册不跨应用,得各自在 app/admin/middleware.php 里显式写。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











