游客发表
ThinkPHP的手册文档写得再全,也挡不住第一次上手时那种“我该从哪敲第一行代码”的手册懵。我见过太多人对着官方手册翻了三小时,手册最后卡在入口文件里一个`define('APP_PATH',手册 __DIR__ . '/../application/')`上——路径写错一个斜杠,整站白屏,手册连报错都不给。手册这框架的手册脾气就这样,规矩多,手册但摸清了就顺手。手册
先说入口文件。手册`public/index.php`是手册你唯一该碰的启动点,别学某些教程把代码塞到根目录去。手册里面无非是手册定义路径常量、加载框架引导文件、手册然后`(new App())->run()`。手册我习惯在`APP_PATH`后面加一行`define('CONF_PATH', __DIR__ . '/../config/')`,把配置文件挪出应用目录,方便多模块共用。这不算标准操作,但省得每个模块都复制一份database.php。
路由是ThinkPHP最容易被低估的部分。默认的`controller/action`模式能跑,但url丑得没法看,`/index.php/Index/index`这种地址发出去自己都嫌丢人。开`route/route.php`,写`Route::get('hello/:name', 'index/hello')`,访问`/hello/think`就能直接映射到控制器方法。注意`:name`后面别加`?`,那是可选参数标记,加了反而匹配不到。我踩过这个坑,查了半小时源码才反应过来。
模型这块,TP6的`Model`类比TP5干净不少。`$this->where('status', 1)->select()`链式调用依然顺滑,但别在循环里查数据库——我接手过一个项目,列表页foreach里套`Db::name('user')->find($id)`,一百条数据跑出两百次查询。改成`whereIn('id', $ids)->select()`再`array_column`转键名,响应时间从2.3秒掉到0.1秒。这种优化手册不会专门写,得自己长记性。
模板引擎默认用Think,语法像`{ $name}`和`{ volist name="list" id="item"}`。但如果你习惯Twig或Blade,TP6允许换驱动,装个`topthink/think-template`再改配置就行。我团队里有人非要用原生PHP写视图,结果XSS过滤得自己手写`htmlspecialchars`,累不累?框架给的`{ :htmlspecialchars($str)}`直接能用,别重复造轮子。
数据库迁移和填充器是TP6才正式引入的。`php think migrate:run`跑迁移文件,`php think seed:run`灌测试数据。生产环境千万别用填充器,我见过有人把`UserSeeder`部署到线上,跑完多出两百个测试账号,密码全是`123456`。迁移文件里`$this->table('user')->addColumn('avatar', 'string')`这种操作可以回滚,但删字段的回滚会丢数据——写`down()`方法时手别抖。
调试模式开`APP_DEBUG=true`,异常页面会显示完整堆栈和SQL语句。但上线前一定关掉,否则数据库密码直接暴露在错误页面上。有次客户截图发我,说网站报错显示“SQLSTATE[HY000] [1045] Access denied”,下面还跟着明文密码。我问他是不是没关debug,他回了个“啊”。这种事手册第一页就写了,但总有人觉得“我开发环境没事”。
缓存用`Cache::set('key', $value, 3600)`,读取`Cache::get('key')`。文件缓存默认存在`runtime/cache`,但并发高的时候文件锁会拖慢速度。换Redis,改`config/cache.php`里的`type`为`redis`,再配好`host`和`port`。别在缓存里存对象,序列化反序列化开销不小,存数组或JSON字符串更稳。我习惯在缓存键名里加版本号,比如`v2_user_'.$id`,改数据结构时直接升版本,旧缓存自然失效,不用手动清。
最后说命令行。`php think`列出所有可用命令,`php think make:controller Api/User`快速生成控制器。自定义命令写在`app/command.php`里,继承`think\console\Command`,实现`configure()`和`execute()`。我写过一个`php think sync:orders`每天凌晨拉取第三方订单,比用crontab调curl干净得多。命令行里`$this->output->writeln('done')`能输出彩色文字,调试时比`var_dump`体面。
ThinkPHP不是最优雅的框架,但它的中文文档和国内生态确实省事。遇到问题先翻`vendor/topthink/framework/src/think`下的源码,比搜索引擎快。手册里没写的,源码里都有——这话听着像废话,但真能省下你发帖等回复的两小时。
友情链接