Yii2控制器报错怎么跳转错误页

胖晨酱_2635

胖晨酱_2635

2026-08-20

312人浏览

原创

抛 notfoundhttpexception 是 yii2 跳转错误页最稳方式;手动 setstatuscode(404) 易因响应头已发送而失效,且 rest 模块会自动覆盖;需确保 errorhandler 配置正确、重写规则无误,并在 error 视图中安全读取 $exception->statuscode。

yii2控制器报错怎么跳转错误页

直接抛 NotFoundHttpException 或其他 HTTP 异常,别手动设状态码——这是 Yii2 跳转错误页最稳的方式。手动调 Yii::$app->response->setStatusCode(404) 极大概率失效,因为响应头可能早已发送或被后续逻辑覆盖。

为什么 setStatusCode(404) 经常不生效

Yii 的 response 对象是延迟写入的,但一旦视图开始渲染、echo 输出、输出缓冲被清空,或调试工具条提前触发了输出,再改状态码就完全无效。常见现象是页面内容正常显示,但浏览器 Network 面板里状态码仍是 200。

  • 必须在 action 开头或 beforeAction() 中调用,绝不能在 render() 之后
  • 检查是否有组件(如日志、调试栏)偷偷输出了内容;可在入口脚本加 ob_start() 临时验证
  • REST 模块(yii\rest\Controller)会自动根据异常类型设状态码,手动设反而会被覆盖

正确跳转 404 错误页:抛 NotFoundHttpException

这是框架原生支持的方式,能自动触发 errorHandler、渲染对应视图、区分环境,并在 API 场景下返回 JSON。

Yii Framework 2.0.51
Yii Framework 2.0.51

Yii Framework 2.0.51 官方 Basic 应用模板,适合旧项目兼容、升级验证和开发测试。

下载
  • 查不到记录时:if (!$model) throw new \yii\web\NotFoundHttpException('ID 不存在');
  • 权限校验失败时更推荐 ForbiddenHttpException,语义更准确
  • 确保 config/web.php 中已配置 'errorHandler' => ['errorAction' => 'site/error'],且该配置在 urlManager 之前
  • 如果抛了异常却看到 Nginx/Apache 默认 404 页,说明请求根本没进 Yii——检查重写规则(Nginx 用 try_files $uri $uri/ /index.php?$args;)和 enablePrettyUrl 是否开启

error 视图里拿不到 $exception->statusCode?

不是所有异常都有 statusCode。只有 \yii\web\HttpException 子类(如 NotFoundHttpException、BadRequestHttpException)才带这个属性;普通 \Exception 或 \ErrorException 的 statusCode 是 0。

  • 在 views/site/error.php 开头加 <?php var_dump($exception ?? null); die; ?> 看实际对象类型
  • 安全读取状态码:用 $exception instanceof \yii\web\HttpException ? $exception->statusCode : 500
  • 更常见的是 error 视图自身出错(比如调用了未定义的 helper),导致二次异常,最终 fallback 到空白页——先注释掉视图里所有非基础 HTML 再试

真正容易被忽略的点是:错误页本身不能依赖任何可能失败的资源。比如在 error.php 里加载 asset bundle、调用未初始化的 component、或引用 layout 中的动态路径,都会让整个错误处理链崩掉,变成白屏或 500。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2025.09.04

3070

22

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

40

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

20

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

20

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

20

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

20

15

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

2026.10.22

20

15

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

2026.10.22

140

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii2中文手册
Yii2中文手册

共0课时 | 0.6万人学习

thinkphp基础介绍和yii2基础介绍
thinkphp基础介绍和yii2基础介绍

共10课时 | 2.6万人学习

Yii2框架基础视频教程
Yii2框架基础视频教程

共22课时 | 2.8万人学习