yii页面跳转分五类:同控制器渲染视图、内部路由重定向、快捷跳转、带参跳转、外部链接及登录回跳,需按场景选方法、传参并避坑。

Yii中页面跳转不是简单拼URL,关键在用对方法、传对参数、避开常见陷阱。核心就五类场景,覆盖日常开发90%以上需求。
同一控制器内渲染视图(不跳转,仅换内容)
适合表单提交后展示结果页、详情页加载等无需地址栏变化的场景。数据通过数组直接注入视图,不经过URL传递。
- $this->render('viewName', ['title' => '文章标题', 'content' => $text]):渲染当前控制器下的 viewName.php,传参安全且高效
- 若不想套用布局(layout),改用 $this->renderPartial(),常用于AJAX局部刷新
- 注意:这不是重定向,浏览器地址不变,也不触发新请求
内部路由重定向(最常用)
跳转到本应用其他 action,推荐用数组方式写路由,框架自动处理 URL 编码和 baseUrl。
- $this->redirect(['post/view', 'id' => 123, 'slug' => 'yii-tutorial']):Yii 1.x 写法,自动终止后续执行
- return $this->redirect(['user/profile', 'id' => $uid]):Yii 2.x 必须加 return,否则跳转无效
- 避免手拼字符串如 ['/post/view?id=123'],会导致参数被二次编码或丢失
快捷跳转:首页、上一页、刷新
语义清晰、代码简洁,适合通用导航逻辑。
-
$this->goHome():跳转至
Yii::app()->homeUrl(Yii 1.x)或Yii::$app->homeUrl(Yii 2.x) -
$this->goBack():读取
$_SERVER['HTTP_REFERER']跳回上一页;若来源不可靠或为空,建议 fallback 到首页 - $this->refresh():重新发起当前请求(GET),常用于防止表单重复提交后的页面刷新
带参跳转与目标页接收
参数走 URL 查询字符串,目标 action 中统一用 request 组件获取,不依赖 $_GET 手动解析。
- 跳转时传参:$this->redirect(['order/detail', 'order_id' => 889, 'tab' => 'log'])
- 目标页接收(Yii 1.x):$orderId = Yii::app()->request->getQuery('order_id')
- 目标页接收(Yii 2.x):$orderId = Yii::$app->request->get('order_id')
- 支持默认值:Yii::$app->request->get('tab', 'summary')
跳转到外部链接或登录后返回原页
跨域跳转要写完整协议,而“登录后回跳”依赖 user 组件的 returnUrl 机制,无需手动存取 session。
- 外链跳转:$this->redirect('https://example.com') 或 return $this->redirect('/static/about.html')
- 登录成功后回跳:$this->redirect(Yii::$app->user->returnUrl)(Yii 2.x)
- 该 returnUrl 由框架在访问需登录页面时自动记录,比如用户点开 /admin/dashboard 被拦到 /site/login,登录后即回 dashboard











