发布于2026-07-12 阅读(0)
扫一扫,手机访问
ThinkPHP 搭建多项目环境,核心概念不是“复制多个项目”,而是通过多应用模式,在一个框架实例里管理多个逻辑上独立的子系统,比如前台、后台、API服务。再配合多环境配置,实现开发、测试、生产等场景的无缝切换。这两者必须协同设计,否则很容易出现路由冲突、配置错乱或者 Class not found 之类的问题。
那么,具体怎么操作?我们来拆解一下。
框架不会自动生成 app/admin、app/api 这些目录,也不能靠改个配置就生效。步骤必须严格按着来:
php think app:create admin,确保生成完整的 app/admin/controller/、app/admin/route.php、app/admin/config/app.php。user_v2 没问题,但 User 或 user-api 会导致加载失败。app/controller 目录——这是单应用模式留下的残留,不删掉,框架会误判为单应用模式。app/admin/config/app.php,确认 'app_namespace' => 'appadmin',不能保留默认的 appcontroller。TP6 不会根据 URL 自动识别该用哪个应用,必须在入口文件里显式地绑定:
public/index.php 中添加:App::bind('admin');(访问 /admin 时)或者使用域名绑定:App::bind('api', 'api.example.com');。app/admin/route.php 必须被主动加载。在该文件开头写 use thinkfacadeRoute;,然后在 app/route.php 中引入:include APP_PATH . 'admin/route.php';。admin.example.com),绑定必须在 index.php 完成;config/app.php 里的 domain_bind 在多应用模式下完全无效。路由分组(Route::group())控制的是 URL 前缀,不是应用目录的映射。混淆了的话,路径就会重复:
/admin/login,就在 app/admin/route.php 里写:Route::group('admin', function () { Route::get('login', 'index/login'); });。app/admin/route.php 里再套一层 Route::group('admin', ...),否则实际路径会变成 /admin/admin/login。/api/v1/user),应该在 app/api/route.php 内部用 Route::group('v1', ...),而不是依赖应用名。所谓“在 dev/prod 目录下放不同配置”是一种常见的误解。ThinkPHP 不按目录自动加载,只认 .env 文件中的 APP_ENV 值:
.env 必须放在项目根目录(与 think 命令同级),并且加入 .gitignore,禁止提交。public/index.php 中启用 dotenv:$dotenv = DotenvDotenv::createImmutable(__DIR__.'/..'); $dotenv->load();。env('DB_HOST', '127.0.0.1') 动态读取,不要在 config/database.php 里写 if-else 判断。@、空格),必须加单引号:DB_PASSWORD='pass@123!'。配置完了先别急着访问页面,跑几个命令确认基础就位:
php think clear:all,尤其要删掉 runtime/route/,旧缓存会掩盖新路由。php think route:list --with-route,确认 admin 和 api 的路由出现在列表中。php think env,输出应该和 .env 一致;如果显示 prod 却没生效,检查一下是不是被服务器提前设置了 APP_ENV 环境变量。http://localhost/admin/index/index,如果返回 404,先核对命名空间和控制器文件路径是否匹配。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8