Hyperf安装后控制器文件需手动创建或用命令生成,标准路径为app/Controller/,命名空间须为App\Controller,且需添加@Controller或@AutoController注解;执行php bin/hyperf.php generate:controller可自动创建规范文件。

Hyperf 安装后控制器文件默认不存在,需要手动创建或通过命令生成。 框架骨架只提供目录结构,不内置任何控制器文件。
控制器文件的标准路径是 app/Controller/
这是 Hyperf 约定的默认控制器存放位置,所有继承 ControllerInterface 或使用 @Controller 注解的类都应放在这里。例如:
app/Controller/IndexController.phpapp/Controller/DownloadController.php
该路径由框架启动时传入的 app_path 参数决定(见 public/index.php 中的 app_path => BASE_PATH .'/app'),不可随意更改,否则注解扫描或路由注册会失败。
用命令生成控制器最可靠
手动建文件容易漏掉命名空间、注解或继承关系,推荐用官方命令:
php bin/hyperf.php generate:controller IndexController
它会自动在 app/Controller/ 下创建带标准命名空间、@Controller 注解和 @GetMapping 示例的方法。若要加前缀,可加参数:
php bin/hyperf.php generate:controller Api/UserController --prefix="/api/user"
注意:执行前确保 config/autoload/annotations.php 中 'scan' => true 且 'paths' 包含 app/Controller,否则注解不会被识别。
为什么访问 404?常见路径相关坑
即使文件存在,也常因以下原因导致路由不生效:
-
SCAN_CACHEABLE=true(默认生产环境开启):开发时改了控制器但没清缓存,需设SCAN_CACHEABLE=false或运行php bin/hyperf.php gen:scan - 命名空间写错,比如漏了
App\Controller,或大小写不一致(Linux 下敏感) - 类没加
@Controller或@AutoController注解,且没在config/routes.php里手动注册路由 - IDE 自动导入把
use Hyperf\HttpServer\Annotation\Controller;导成其他同名类(如 Swoole 的)
调试时可直接运行 php bin/hyperf.php route:list 查看是否已注册目标路由,比反复刷新页面更高效。
控制器位置本身很简单,但实际生效依赖注解扫描、命名空间、路由注册三者对齐;任一环节断开,就会“文件在却 404”。


















