入门起点是php think能运行且public/index.php输出“Hello World”;需确认PHP≥8.0、必备扩展启用、Web服务器重写配置正确,并通过runtime/log日志排查白屏问题。

php think 能跑起来、public/index.php 能输出 “Hello World”,才真正算入门起点;卡在这两步,后面学路由、模型全是空谈。
先确认环境和入口是否真通
很多人装完 composer create-project topthink/think tp8 就急着写路由,结果访问 http://localhost/tp8/public/index.php 一片空白或报 500。这不是代码问题,是环境没达标:
- 运行
php -v确认版本 ≥ 8.0(TP8 强制要求) - 执行
php -m | grep -E "mbstring|openssl|pdo|curl",缺一个扩展都可能让index.php直接挂掉 - Apache 必须启用
mod_rewrite;Nginx 配置里漏了try_files $uri $uri/ /index.php?$query_string;,路由全 404 -
runtime/log/下的错误日志比浏览器白屏更可信——别只盯着页面
路由写了却进不去,先查 php think route:list
写了 Route::get('test', function() { return 'OK'; }); 却访问 /test 还是跳首页?不是语法错,是注册时机或路径没对上:
- ThinkPHP 8 默认走多应用模式,路由必须写在
route/app.php(不是app/route.php或route/route.php) - 执行
php think route:list,看你的规则是否真出现在列表里——没出现,说明文件没被加载 -
public/index.php中要确保有App::routeLoad(true),否则路由不自动加载 - URL 访问必须匹配应用名:比如用默认
app应用,就得访问/test,而不是/index/test(后者会尝试找index应用)
Db::table() 返回空,别急着改 SQL,先看 strict 和字段
Db::table('user')->select() 返回空数组,但数据库明明有数据?TP8 默认开启严格字段检查,静默过滤整行,不报错也不提示:
- 加
->fetchSql(true)看生成的 SQL 是否带了异常条件(比如WHERE 1=0) - 检查
config/database.php里的'strict' => true,临时设为false测试是否恢复数据 - 确认表字段在数据库中存在且大小写一致(MySQL 在 Linux 下区分大小写)
- 如果用 MySQL 8+,注意
datetime字段可能因时区转换变成null,导致整行被 strict 模式丢弃
控制器里 $this->fetch() 报 “Template not found”
不是模板路径写错了,是 ThinkPHP 的视图定位规则和命名空间绑定很具体:
立即学习“PHP免费学习笔记(深入)”;
- 控制器
app\controller\User.php中调用$this->fetch(),默认找的是app/view/user/目录下的模板文件 - 方法名是
read,就去找read.html;如果是read_index,得手动写$this->fetch('read_index') - 模板目录不能放在
public/下,必须在app/view/内,且目录名、文件名需小写 + 下划线(如user/read.html) - 若启用了模板缓存,改了模板后记得清空
runtime/view/下对应缓存文件,否则还是旧内容



















