Yii 3.0 路由必须显式声明,取消 actionIndex() 自动映射;路由由 PSR-15 中间件实现,需通过属性路由(#[Route])、配置数组或第三方路由器注册,并依赖 yiisoft/router 和 DI 容器正确绑定控制器。

你需要在 Yii 3.0 中正确配置路由,否则控制器方法不会响应任何 HTTP 请求——因为 Yii 3.0 已彻底取消 actionIndex() 自动映射到 /index 的隐式约定,所有路由必须显式声明,漏配即 404。
理解 Yii 3.0 路由本质
Yii 3.0 的路由不再是 Application 层的配置项,而是 PSR-15 中间件栈中的一环,由 yiisoft/router 扩展提供,它不依赖 Yii::$app,也不读取 urlManager 配置。路由规则必须注册为独立服务,并注入到中间件链中。
这意味着:你不能再在 config/web.php 里写 'urlManager' => [...];也不能靠继承 Controller 就自动获得路由能力;更不能指望 SiteController::actionIndex() 在访问 / 时被调用——除非你明确告诉路由器:“GET / → 这个方法”。
方法一:使用属性路由(推荐,零配置侵入)
第一步:确保控制器类使用 #[Route] 属性标注
在控制器方法上方添加 PHP 8.2+ 原生 Attribute:
#[Route('GET /')] → 绑定根路径;#[Route('POST /user')] → 绑定 POST 请求;支持多个属性叠加,如 #[Route('GET /user')][Route('HEAD /user')]。
第二步:确认控制器已通过 DI 容器注册且可解析
Yii 3.0 不会自动扫描控制器目录,必须在 config/common.php 中显式绑定接口或类名,例如:SiteController::class => ['class' => SiteController::class]。否则路由器找到路由后,无法实例化控制器,直接抛出 ContainerException。
第三步:确保 yiisoft/router 和 yiisoft/psr7 已安装并启用
执行 composer require yiisoft/router yiisoft/psr7;若未安装,路由器中间件根本不会加载,所有请求将跳过路由解析,直接进入 404 处理流程。
方法二:手动注册路由配置数组
适用于需要集中管理、动态生成或与旧系统兼容的场景。
在 config/routes.php 中返回一个关联数组,键为 HTTP 方法 + 路径模式,值为处理闭包或可调用数组:
return [
'GET /' => [SiteController::class, 'index'],
'POST /api/login' => [AuthController::class, 'login'],
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
];
⚠️ 注意:数组键中的路径不支持通配符或正则,仅支持精确匹配和 {param} 占位符(需配合参数解析中间件);【路径末尾斜杠必须严格一致】,GET /user 和 GET /user/ 是两个不同路由。
将该文件路径加入容器配置,在 config/common.php 中绑定:
'routes' => static function () { return require __DIR__ . '/routes.php'; },
方法三:集成第三方路由器(如 FastRoute)
如果你已有 FastRoute 使用经验,或项目需极致性能,可替换默认路由器。
安装:composer require nikic/fast-route
创建适配器类,实现 Yiisoft\Router\RouterInterface,把 FastRoute 的 Dispatcher 封装进去。
在 config/common.php 中覆盖默认服务:
Yiisoft\Router\RouterInterface::class => [FastRouteAdapter::class],
这一步必须在 yiisoft/router 之前注册,否则容器会优先使用默认实现——【服务绑定顺序决定最终生效者】。
验证路由是否生效
① 启动内置服务器:php -S localhost:8080 public/index.php
② 访问对应路径,观察响应状态码和内容
③ 若返回 404 且无错误堆栈,说明路由器未捕获请求——检查是否漏装 yiisoft/router 或中间件未注入;若报 Class not found,说明控制器未在容器中注册;若报 Cannot resolve parameter,说明构造函数依赖未配置。
④ 查看日志:Yii 3.0 默认不启用 Debug Toolbar,如需查看路由匹配过程,需手动安装 yiisoft/yii-debug 并注册中间件,否则你只能靠 var_dump 调试。


















