必须用 composer create-project 初始化,因 topthink/think 是项目骨架而非普通库;composer require 只下载代码不生成 public/、app/、runtime/ 等结构,导致 Class 'think\App' not found 且自动加载失效。

必须用 composer create-project 初始化,composer require topthink/think 会直接失败——框架核心已不支持以依赖方式引入。
为什么 composer require topthink/think 不行
TP6+ 的包名虽是 topthink/think,但它本质是一个完整项目骨架,不是普通 Composer 库。执行 require 只会拉取空壳(无 public/、app/、runtime/),导致 Class 'think\App' not found。官方明确弃用该方式,所有初始化脚本(如生成 .env、初始化 runtime/)仅在 create-project 的 post-create-project-cmd 中触发。
- 错误现象:执行
composer require topthink/think后,vendor/下有文件但访问 404,或php think version报错 - 根本原因:缺少入口文件
public/index.php、自动加载映射未按项目结构注册、runtime/目录未创建 - 兼容性影响:TP8 要求 PHP ≥ 8.1,若用
require手动补目录,极易漏掉 PHP 版本适配的配置项(如config/app.php中的default_timezone行为变更)
composer create-project 正确用法
命令本身简单,但参数和上下文决定成败。国内用户尤其要注意镜像和版本约束。
- 基础命令:
composer create-project topthink/think myapp—— 创建最新稳定版(当前为 TP8.x) - 指定版本(推荐):
composer create-project "topthink/think:^6.1" tp6或composer create-project "topthink/think:8.0.0" tp8,避免装到预发布分支 - 国内加速必备:
composer config -g repo.packagist https://mirrors.aliyun.com/composer/,执行前先composer clear-cache - PHP 版本不匹配时临时绕过:
composer create-project topthink/think myapp --ignore-platform-reqs,但后续务必补全扩展(mbstring、openssl、pdo等)
初始化后必检三项
安装完成不等于能跑,90% 的启动失败源于这三处疏漏。
立即学习“PHP免费学习笔记(深入)”;
-
public/index.php必须存在且可读 —— 这是唯一 Web 入口,缺失说明下载中断或磁盘空间不足 -
runtime/目录需可写:chmod -R 755 runtime/(Linux/macOS),Windows 下确认 IIS/Apache 运行账户对该目录有修改权限 -
APP_DEBUG在.env中设为true—— 否则报错静默,连Class not found都看不到 - 验证自动加载:
php -r "require 'vendor/autoload.php'; var_dump(class_exists('think\App'));"输出bool(true)才算过关
启动验证别跳过 php think run
不要一上来就配 Apache/Nginx,先用内置服务器快速验证环境是否真正就绪。
- 进项目根目录(含
think可执行文件),运行:php think run - 它等价于
php -S 127.0.0.1:8000 -t public/,强制以public/为 Web 根,规避路径计算错误 - 访问
http://127.0.0.1:8000出现 ThinkPHP 欢迎页,说明路由、自动加载、模板渲染全部通路 - 如果提示
Could not open input file: think,说明当前不在项目根目录;如果报command not found,检查vendor/bin/是否被加入 PATH 或尝试php vendor/bin/think run
真正卡点不在命令本身,而在初始化后对 public/ 路径的依赖、runtime/ 权限的隐式要求,以及国内网络下镜像源的实效性——这些细节不手动验证,光靠“安装成功”四个字,项目大概率会在第一次请求时崩在 think\App 实例化之前。



















