ThinkPHP必须用composer create-project初始化完整骨架,因require仅下载源码不生成目录结构、不执行初始化脚本,导致App类找不到、命令失效、路由不生效。

ThinkPHP 不是普通 Composer 包,不能用 composer require topthink/think 往已有项目里“加”,必须用 composer create-project topthink/think 初始化完整骨架;否则 Class 'think\App' 一定报错,且 php think 命令根本跑不起来。
为什么 composer require topthink/think 会失败
它只把框架源码下载到 vendor/topthink/think,不生成 app/、config/、public/index.php,也不执行 post-create-project-cmd 脚本(比如创建 runtime/、复制 .env.example)。结果就是:index.php 虽然能引入 vendor/autoload.php,但 App 类找不到、路由不生效、命令行直接报错。
Class 'think\App' not found- 首页空白,无任何错误输出(
APP_DEBUG=false默认关着) Command "route:list" is not defined-
require __DIR__ . '/../vendor/autoload.php'路径存在,但类就是加载不到
composer create-project 正确用法与避坑点
这是唯一官方支持的初始化方式,本质是让 Composer 拉取完整项目模板并触发初始化脚本。别在已有项目目录里试,目标目录必须为空或不存在,否则命令直接退出。
- 基础命令:
composer create-project topthink/think myapp - 指定版本(推荐用
^6.1或^8.0):composer create-project "topthink/think:^8.0" myapp(注意引号,避免 shell 解析错误) - 加
--remove-vcs --no-interaction加速流程,适合 CI/CD - 国内用户务必配镜像源,否则极易超时:
composer config -g repo.packagist https://mirrors.aliyun.com/composer/ - 安装完立刻检查
public/是否存在,并确认 Web 服务器 root 指向它,不是项目根目录
vendor/autoload.php 不生效的 4 个硬坑
即使 create-project 成功,本地跑起来还是报类找不到,大概率卡在这几个地方:
立即学习“PHP免费学习笔记(深入)”;
-
index.php中require路径写错:漏掉../、混用反斜杠(Windows 下尤其容易出事),应统一用正斜杠 +__DIR__ - 启用了
opcache却没清:改完composer.json或新增类后,必须调opcache_reset()或重启 PHP-FPM - Composer 2.5+ 默认跳过 scripts 钩子:ThinkPHP 的自动引导(如类映射生成)被绕过;解决方法是在
composer.json的config节点加"allow-plugins": {"topthink/think-installer": true} - CLI 使用的
php.ini和 Web 服务器不是同一份:XAMPP/MAMP 常见,需单独确认 CLI 下mbstring、openssl、pdo是否启用:php -m | grep -E "mbstring|openssl|pdo"
扩展包装完为啥 use think\captcha\Captcha 还报错
composer require topthink/think-captcha 只负责下载和注册自动加载,不等于服务就绪。TP6/8 扩展依赖服务提供者(Service Provider)机制,是否生效取决于三件事:
- 包本身是否带
think-service声明(看其composer.json的extra.think-service字段) - 是否已执行过
composer dump-autoload -o(通常require后自动触发,但手动改过 autoload 配置就得重跑) - 是否在
config/app.php的providers数组里显式注册了该服务提供者(部分包需要手动加,如topthink/think-swoole)
最常被忽略的是第三点:装完包,不注册 provider,类能 new 出来,但门面(Facade)、中间件、事件监听器全不工作。



















