yii框架路由与跳转是一体化请求处理机制:url进入→解析为路由→匹配控制器动作→执行逻辑→决定重定向或渲染。需配置urlmanager启用美化url、定义rules映射路径,并用url::to()生成url;重定向改变地址栏,渲染保持url不变;accesscontrol须按白名单优先顺序配置。

Yii框架的路由与跳转不是割裂的两件事,而是一套连贯的请求处理机制:URL进来→解析成路由→匹配控制器动作→执行逻辑→决定是否跳转或渲染。掌握这个闭环,才能真正高效使用。
路由定义:让URL找到对应的代码
Yii通过URL管理器(UrlManager)把浏览器地址映射到具体控制器和动作。关键在配置——默认格式如 /index.php?r=user/view&id=123,美化格式可变成 /user/123。
- 启用美化URL:在配置中设
'enablePrettyUrl' => true,并确保Web服务器重写规则已生效(如Nginx加try_files $uri $uri/ /index.php?$args;) - 定义规则:用
rules数组声明路径模式,例如'post/<id:>' => 'post/view'</id:>,表示访问/post/100就调用PostController::actionView() - 生成URL更安全:别拼接字符串,用
Url::to(['post/view', 'id' => 100])或$this->createUrl(['post/view', 'id' => 100]),它会自动适配当前URL格式
页面跳转:重定向 vs 渲染,用对场景
跳转不等于刷新页面,要分清“服务端重定向”和“视图渲染”两种意图。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
重定向(Redirect):发HTTP 302响应,浏览器地址栏变化,常用于表单提交后防重复、权限拦截或流程引导
$this->redirect(['user/profile']);$this->redirect(['site/login', 'returnUrl' => Yii::$app->request->url]); -
视图渲染(Render):服务端直接返回HTML,URL不变,适合展示结果页或局部切换
$this->render('profile', ['model' => $user]);$this->renderPartial('modal_form'); - 快捷方法:
$this->goHome()跳首页,$this->goBack()回上一页(依赖$_SERVER['HTTP_REFERER'],注意空值或循环风险)
权限控制:路由级拦截的关键配置
AccessControl过滤器必须按顺序写,否则登录态检查会失效。
- 白名单优先:允许未登录访问的页面(如登录、注册、错误页)必须放在最前
['actions' => ['login', 'error'], 'allow' => true] - 登录态兜底:紧随其后写已登录才可访问的规则
['users' => ['@'], 'allow' => true] - 细化控制:配合
'only' => ['index', 'view']或'except' => ['create']精确限定作用范围 - 模块内配置:如果用
admin模块,AccessControl要写在modules/admin/controllers/Controller.php里,而不是主应用的SiteController
常见陷阱与优化建议
很多问题其实源于配置细节或调用时机偏差。
- RBAC中别把路由当权限:不要执行
$auth->createPermission('/admin/user/index');应建业务权限如manageUser,再用addChild()关联路由 - 动态跳转带参:重定向时传参用数组形式,
$this->redirect(['order/detail', 'id' => $id, 'tab' => 'log']),避免手动拼URL - 403白屏?检查AccessControl顺序,确认未登录用户是否被
['user' => ['@']]提前拦截而没走到登录跳转逻辑 - 调试路由:开启调试工具栏,查看「Routes」面板,能实时看到当前请求匹配了哪条规则、解析出什么路由和参数










