yii跳转核心是redirect()和refresh()两个方法:前者发送302重定向使url改变,后者重新加载当前页防重复提交;均需加return,参数须用数组格式如['site/about'],禁用手动拼接url。

Yii 中跳转很简单,核心就两个方法:yii\web\Controller::redirect() 和 yii\web\Controller::refresh(),用对场景、传对参数,5分钟就能跑通。
一、页面跳转:用 redirect() 最常用
这是最常用的跳转方式,会向浏览器发送 HTTP 302 重定向响应,地址栏 URL 会变。
- 跳转到站内路由(推荐):return $this->redirect(['site/about']); → 跳到 /index.php?r=site%2Fabout
- 跳转到绝对 URL:return $this->redirect('https://example.com');
- 跳转到带参数的路由:return $this->redirect(['post/view', 'id' => 123]);
- 跳转后显示提示消息(需配合 Yii 的 flash):$this->setFlash('success', '操作成功!'); return $this->redirect(['index']);
二、刷新当前页:用 refresh() 最省事
不改变 URL,只是重新加载当前页面(等价于按 F5),适合表单提交后防重复提交。
- 基本用法:return $this->refresh();
- 可带 flash 提示:$this->setFlash('info', '已刷新'); return $this->refresh();
- 注意:它会重新执行当前 action 的全部逻辑(包括数据库查询、验证等),慎用于耗时操作
三、跳转前必看的三个细节
新手常踩坑的地方,提前避开更高效:
- 必须 return:redirect() 和 refresh() 都要加 return,否则后续代码还会执行
- 不能在 echo 或输出之后调用:PHP headers already sent 错误就是因为已有 HTML/echo 输出
-
路由数组写法是 Yii 特色:
['controller/action']是内部路由,不是路径;不要写成['/site/index'](开头斜杠在 Yii2 中非必需,且可能出错)
四、进阶小技巧:跳转后自动滚动或传参
原生 redirect 不支持锚点或 POST 数据,但有轻量解法:
- 带锚点跳转:return $this->redirect(['post/view', 'id' => 456, '#' => 'comments']); → 自动滚动到页面 id="comments" 元素
- 跳转时传临时数据(不用 session):$this->session->setFlash('next_message', '欢迎回来');,目标页用 Yii::$app->session->getFlash('next_message') 读取
- 服务端跳转失败?检查是否开启了 output buffering,或控制器中提前 echo/print_r 了内容











