第一次接触ThinkPHP6可能会被各种配置项吓到,但实际搭建过程比想象中简单得多。我去年接手一个电商项目时,仅用半小时就完成了基础框架搭建。下面分享的步骤已经过滤掉所有不必要的环节,只保留最核心的操作路径。
ThinkPHP6对运行环境有明确要求:PHP版本≥7.2.5且需要开启PDO扩展。建议使用php -v命令检查当前版本,如果不符合要求,推荐用Docker快速搭建环境。这里有个小技巧:在命令行运行php -m | grep pdo可以快速验证PDO扩展是否启用。
Composer是PHP世界的包管理器,相当于Node.js的npm。安装时有个常见坑点:国内网络可能连接不上官方源。我通常用这个命令切换阿里云镜像:
bash复制composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
安装框架时,很多人习惯直接克隆仓库,但更规范的做法是:
bash复制composer create-project topthink/think myproject
这个命令会自动完成三件事:创建myproject目录、下载核心框架、初始化基础目录结构。记得把myproject换成你的项目名,比如我就喜欢用项目缩写+年份的命名方式。
框架默认处于生产模式,这对开发者很不友好。打开调试模式有个隐藏技巧:复制根目录下的.example.env文件并重命名为.env,这个文件已经预设了APP_DEBUG=true。有次我忘记这个步骤,调试了半天才发现是模式问题。
首次访问时很多人会被这个URL搞懵:
code复制http://localhost/myproject/public/index.php/index/index
其实它对应的是:
建议立即配置虚拟主机指向public目录,这样后续访问时就能省略public路径段。Nginx配置示例:
nginx复制server {
listen 80;
server_name tp6.test;
root /path/to/myproject/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}
单应用模式适合简单项目,但当需要同时开发API和管理后台时,多应用模式就是刚需。安装扩展时要注意版本兼容性:
bash复制composer require topthink/think-multi-app
然后在config/app.php中添加:
php复制'auto_multi_app' => true
多应用模式下,app目录会变成这样:
code复制app/
├── admin/ # 后台应用
│ ├── controller/
│ └── ...
└── api/ # 接口应用
├── controller/
└── ...
每个应用都是独立的模块,可以拥有自己的配置、路由和视图。我在电商项目中就拆分了api、admin、merchant三个应用。
路由文件位于route/app.php,最简单的定义方式:
php复制Route::get('hello/:name', 'index/hello');
这表示当访问/hello/tom时,会执行Index控制器的hello方法,并传入参数tom。
多应用模式下URL会变成:
code复制http://localhost/api/index/hello
这里的api就是应用标识。路由文件也需要放在对应应用的目录下:
code复制app/
└── api/
└── route/
└── app.php
对于API版本控制,可以这样分组:
php复制Route::group('v1', function(){
Route::get('user', 'api.v1.User/index');
})->prefix('api.v1.');
实际项目中我常用这种结构管理不同版本的接口。
多个应用可能需要共用某些服务。我的做法是在app目录下创建common子目录,存放公共逻辑。然后在需要的地方调用:
php复制use app\common\service\UploadService;
有时需要在一个应用中调用另一个应用的控制器。经过多次测试,最稳定的方式是:
php复制$response = app('http')->name('admin')->controller('Index')->action('dashboard');
这种调用方式虽然有些绕,但能确保各应用保持松耦合。
实际项目中我会增加这些目录:
code复制www/
├── app/ # 应用代码
├── config/ # 公共配置
├── extend/ # 扩展类库
├── runtime/ # 运行时文件
└── vendor/ # 第三方依赖
这种结构更符合企业级项目规范。
上线前务必做这三件事:
php think optimize:routephp think optimize:config有次我忘记做路由缓存,QPS直接降了40%。这些优化步骤看似简单,但对性能影响巨大。