yii2.0.55需配置errorhandler组件实现异常自动跳转、日志记录与环境区分:在/config/web.php中配置'errorhandler'并置于'urlmanager'前,定义erroraction路由;复用yiiweberroraction类,创建对应error.php、error-404.php、error-500.php视图;设置yii_debug与yii_env开关,配置log组件写入runtime/logs,确保目录可写且不可web访问;最后通过抛异常验证跳转与日志。

Yii2.0.55错误处理配置教程【异常捕获】需要让未捕获异常自动跳转到友好页面、记录日志、区分开发与生产环境响应,同时避免调试信息泄露、静态资源路径错乱导致的错误页白屏或404。
配置errorHandler组件
打开/config/web.php,在'components'数组中添加或确认存在以下配置:
'errorHandler' => [ 'errorAction' => 'site/error', 'maxSourceLines' => 15, 'maxTraceString' => 512],
这一步必须放在'urlManager'之前,否则errorAction路由无法被正确解析;若站点使用自定义控制器(如ErrorController),则'errorAction'需改为'error/error',且确保该控制器继承yiiwebController。
创建SiteController的error动作
进入/controllers/SiteController.php,在public function actions()方法内加入'error'项:
public function actions(){ return [ 'error' => ['class' => 'yiiwebErrorAction'], ];}
注意:【不要手动写actionError()方法】,直接复用yiiwebErrorAction类即可——它已内置对404、500等状态码的识别与视图分发逻辑,手写反而会绕过框架异常捕获链。
准备错误视图文件
在/views/site/目录下创建三个必需文件:
error.php:通用错误页,用于非特定HTTP状态码的异常;error-404.php:仅当exception instanceof yiiwebNotFoundHttpException时渲染;error-500.php:专用于服务器内部错误(如数据库连接失败、PHP致命错误)。
这三个文件名必须严格匹配,大小写不可错,否则ErrorAction找不到对应视图,直接返回空白页;视图中可通过$exception变量获取异常对象,例如= $exception->getMessage() ?>,但【生产环境禁止输出$exception->getTraceAsString()】,否则敏感路径和数据库凭证可能暴露。
设置环境开关与日志路径
第一步:确认/web/index.php顶部两行已设为:
defined('YII_DEBUG') or define('YII_DEBUG', false);defined('YII_ENV') or define('YII_ENV', 'prod');
第二步:检查/config/main.php中'log'组件是否启用,并确保targets包含file类型:
'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], 'logFile' => '@runtime/logs/app.log' ] ],],
第三步:执行chmod -R 755 runtime/logs,否则日志写入失败,错误将无迹可查;【runtime目录必须可写,且不能被Web直接访问】,宝塔面板中需关闭该目录的“防跨站攻击”或显式设置open_basedir排除/www/wwwroot/your-site/runtime。
验证异常触发路径
① 临时修改/controllers/SiteController.php中任意一个action,末尾加一行throw new Exception('test error');;
② 访问对应URL,观察是否跳转至/site/error且页面显示“test error”;
③ 查看/runtime/logs/app.log,确认最新一条日志含[error][application]前缀及完整堆栈;
④ 将YII_DEBUG改回false,刷新页面——此时应只显示通用错误提示,不出现代码行号或变量dump。











