service.php 不是 thinkphp 官方配置文件,框架不会自动加载;业务服务类应放在各应用的 app/admin/service/ 等目录下,按 psr-4 注册命名空间,并通过 provider.php 或 app.php 进行容器绑定。

多应用模式下,service.php 不该单独存在 —— 它不是框架默认加载的配置文件,放哪都没用。
为什么找不到 service.php?
ThinkPHP 官方配置体系里压根没有 service.php 这个标准配置文件。你搜到的可能是别人自定义的命名,或是把 provider.php、app.php 或服务容器绑定逻辑误称为 service.php。
- 框架启动时只自动加载
config/下的app.php、database.php等明确列出的文件 -
service.php不在thinkacadeConfig的默认扫描列表里,也不会被Config::load()自动识别 - 即使你手动
Config::load('service'),也得确保路径正确且返回的是合法数组结构
Service 层代码该放哪?不是配置文件
如果你实际想问的是「业务服务类(如 UserService)该放哪」,那答案很明确:
- 每个应用下独立建
service目录:app/admin/service/、app/api/service/ - 命名空间必须匹配:比如
appdminserviceUserService对应app/admin/service/UserService.php - 别漏掉
composer.json的 PSR-4 声明:"app\admin\service\": "app/admin/service/",然后运行composer dump-autoload - 控制器里用依赖注入获取:
public function __construct(private UserService $userService),别new UserService()或app()->make()
需要注册服务绑定?用 provider.php 或 app.php
若你要做容器绑定(比如把接口绑定到具体实现),应该写在对应应用的 provider.php 里(app/admin/provider.php),或全局 app/provider.php:
return [
ppcommoninterfaceOrderService::class => ppdminserviceOrderService::class,
];
而不是另建一个 service.php 放配置目录里 —— 那样框架根本不会读它,徒增维护成本。
最常被忽略的一点:多应用下每个 service 目录都得单独注册 autoload,少一个 dump-autoload 就 Class not found;而容器绑定一旦写错路径或没生效,__construct 注入就会失败,报错却只显示「Cannot resolve …」,不提示具体缺哪个类。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











