hyperf 默认已配置 psr-4,仅需为自定义命名空间(如 app)在 composer.json 的 autoload.psr-4 中添加 "app\": "app/",确保命名空间结尾双反斜杠、路径大小写严格一致,并执行 composer dump-autoload 生效。

Hyperf 默认已配置好 PSR-4 自动加载,你**不需要额外配** —— 除非你要加自己的命名空间(比如 App 或 Common),或者引入 legacy 类文件、全局函数。配错或漏掉 composer dump-autoload 是报 Class not found 的最常见原因。
Hyperf 项目里怎么加自己的 PSR-4 命名空间
Hyperf 骨架项目默认只有 "Hyperf\": "vendor/hyperf/" 这类框架内部映射,你的业务代码得自己声明。比如想把 AppControllerIndexController 映射到 app/Controller/IndexController.php:
- 编辑项目根目录下的
composer.json,在"autoload"→"psr-4"下追加:"App\": "app/"
- 确保文件路径与命名空间严格对应:
app/Controller/IndexController.php里必须有namespace AppController; - 运行
composer dump-autoload—— 不执行这步,新类永远不生效 - 如果开发阶段调试,先别加
-o;上线前可加composer dump-autoload -o提速,但会跳过未声明目录里的类
为什么加了 psr-4 还是 Class not found
不是配置写错了,大概率是这三个地方之一没对上:
-
composer.json中的命名空间末尾少了反斜杠,比如写成"App": "app/"(缺\)→ 应为"App\": "app/" - 类文件里
namespace大小写不一致,例如写了namespace appController;(小写app),而 PSR-4 映射的是App\ - 文件放在了
app/下,但类名没按目录结构来,比如app/Helper.php里写了namespace App;,而不是namespace AppHelper; - 改完
composer.json没跑composer dump-autoload,或者跑了但终端没报 success(可能静默失败,检查是否有 warning)
legacy 类或全局函数怎么加进自动加载
老项目迁移常有无命名空间的类或一堆 function xxx(),不能塞 PSR-4,得用 classmap 或 files:
- 加旧类:在
"autoload"下加"classmap"数组,填相对composer.json的路径,如"classmap": ["legacy/", "database/seeds/"]
→ Composer 会扫描这些目录下所有.php文件,生成类名到路径的硬映射 - 加函数文件:用
"files",路径也必须相对composer.json,且带.php扩展名,例如:"files": ["app/functions/helpers.php"]
→ 这个文件会在require vendor/autoload.php时被require_once,里面只能放函数、const、define(),不能有类定义 - 无论
classmap还是files,改完都得再跑一次composer dump-autoload
Hyperf 里 autoload-dev 怎么用
测试类(比如 tests/ 下的 PHPUnit 用例)不该进生产 autoload,要用独立的 "autoload-dev":
- 在
composer.json里加:"autoload-dev": { "psr-4": { "Tests\": "tests/" } } - 对应地,
tests/ExampleTest.php必须有namespace Tests; - 运行
composer dump-autoload默认只处理"autoload";要加载测试类,得加--dev参数:composer dump-autoload --dev - Hyperf 的
phpunit.xml通常已配置好自动加载,但如果你手动 requirevendor/autoload.php启动测试,就得确认它是否含autoload-dev规则(composer install --dev或dump-autoload --dev后才生效)
最易被忽略的一点:Hyperf 的组件(如 hyperf/view)自身也有 autoload 配置,它们写在各自包的 composer.json 里,由 Composer 自动合并。你不需要、也不应该去改 vendor/hyperf/*/composer.json —— 任何手动修改都会在下次 composer update 时被覆盖。











