必须用 composer create-project,因为 topthink/think 是项目模板而非普通库,该命令才能生成 app/、public/index.php、think 脚本等完整骨架及 PSR-4 自动加载配置;而 composer require 只安装 vendor 包,缺失启动必需结构,导致 Class 'think\App' not found 等错误。

必须用 composer create-project,其他方式装出来的不是 TP6 项目,只是个空壳。
为什么 composer require topthink/think 不行
这个命令只把 topthink/think 包拉进 vendor/,但不会生成 app/、public/index.php、think 命令脚本这些骨架文件。结果一运行就报 Class 'think\App' not found 或 require(): Failed opening required 'base.php'。
-
topthink/think是项目模板(skeleton),不是普通库;topthink/framework才是核心框架包 - 所有官方命令(如
php think make:controller)都依赖项目级 autoload 映射,而它只在create-project过程中注入 - 手动补目录或改
composer.json极易漏掉 PSR-4 配置、入口路由引导逻辑、环境加载顺序
composer create-project 的正确写法和版本控制
不加版本约束,现在默认可能拉到 TP8 的预发布版(比如 dev-main),导致文档不匹配、命令失效、扩展兼容问题。
- 装最新稳定 TP6:用双引号包裹版本约束,防 shell 解析出错 ——
composer create-project "topthink/think:^6.3" tp6-demo - 生产环境推荐锁死小版本:例如
composer create-project topthink/think tp6-demo "6.3.10" - 别用
--prefer-dist:TP6 的build.php、控制器 stub 等文件在 dist 包里被删了,后续php think build会失败 - 如果提示
Could not find package,先清缓存:composer clear-cache,再切阿里云镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
装完立刻要做的三件事,跳过一个就跑不起来
很多人看到命令执行完就以为成功了,其实骨架只是生成了,TP6 启动链还没接上。
- 重命名并填写
.env:复制.env.example→.env,至少设APP_DEBUG = true和APP_ENV = local;Windows 下务必保存为 UTF-8 无 BOM,否则php think直接静默退出 - 确认
runtime/可写:chmod -R 755 runtime/(Linux/macOS);Windows 下若用 WSL 或 Docker 挂载卷,需chmod -R 777 runtime/,否则日志、缓存、模板编译全失败,页面空白无提示 - 验证
think命令可执行:cd tp6-demo && php think version;若报Permission denied,Linux/macOS 运行chmod +x think,Windows 检查php.exe是否在 PATH 且文件换行符是\n而非\r\n
Web 服务器配置最容易被忽略的点
本地用 php think run 或 php -S localhost:8000 -t public/ 能通,不代表部署就 OK —— 根本原因常出在 Web 根目录没对准。
- Apache 必须启用
mod_rewrite,且虚拟主机DocumentRoot指向public/目录,不是项目根目录 - Nginx 配置里
root必须设为public/,并带标准try_files:try_files $uri $uri/ /index.php?$query_string; - 直接双击打开
public/index.php或用浏览器打开文件路径(file:///协议)必然失败——TP6 依赖$_SERVER变量和路由引导,离了 PHP SAPI 就不工作 - 访问时出现
Primary script unknown,90% 是 Nginx 的fastcgi_param SCRIPT_FILENAME拼错了路径,没落到public/index.php
真正卡住人的从来不是命令敲错,而是 .env 没生效、runtime/ 权限不对、Web 服务器没指向 public/ 这三处。它们不出错,但会让整个应用静默失败。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











