yii2框架的错误处理

在查找yii2相关开发资料过程中发现很多人对yii2的错误处理流程不清楚,尤其是经常有一些疑惑,比如”为什么我的程序一旦出现问题,就会自动打印出错误呢?它是怎么监听的?在哪里用的try catch?”,下面我详细的描述一下错误处理流程,希望对大家学习yii框架有所帮助。

预定义开启错误处理常量

# \yii\BaseYii.php/**

* This constant defines whether error handling should be enabled. Defaults to true.

*/

defined(\’YII_ENABLE_ERROR_HANDLER\’) or define(\’YII_ENABLE_ERROR_HANDLER\’, true);

预定义默认组件errorHandler

yii2\web\Application.php

/**

* @inheritdoc

*/public function coreComponents(){

return array_merge(parent::coreComponents(), [

\’request\’ => [\’class\’ => \’yii\web\Request\’],

\’response\’ => [\’class\’ => \’yii\web\Response\’],

\’session\’ => [\’class\’ => \’yii\web\Session\’],

\’user\’ => [\’class\’ => \’yii\web\User\’],

\’errorHandler\’ => [\’class\’ => \’yii\web\ErrorHandler\’],

]);

}

运行时初始化注册错误处理机制registerErrorHandler

yii\base\Application.php

public function __construct($config = []){

Yii::$app = $this;

$this->setInstance($this);

$this->state = self::STATE_BEGIN;

$this->preInit($config);

$this->registerErrorHandler($config);

Component::__construct($config);

}#/**

* 注册错误处理组件

* @param array $config application config

*/protected function registerErrorHandler(&$config){

if (YII_ENABLE_ERROR_HANDLER) {

if (!isset($config[\’components\’][\’errorHandler\’][\’class\’])) {

echo "Error: no errorHandler component is configured.\n";

exit(1);

}

$this->set(\’errorHandler\’, $config[\’components\’][\’errorHandler\’]);

unset($config[\’components\’][\’errorHandler\’]);

$this->getErrorHandler()->register();

}

}

分析yii\web\ErrorHandler处理类register方法

/**

* Register this error handler

*/public function register(){

ini_set(\’display_errors\’, false);

set_exception_handler([$this, \’handleException\’]);

set_error_handler([$this, \’handleError\’]);

if ($this->memoryReserveSize > 0) {

$this->_memoryReserve = str_repeat(\’x\’, $this->memoryReserveSize);

}

register_shutdown_function([$this, \’handleFatalError\’]);

}

通过上面的方法,我们能看到,yii2通过全局异常处理函数set_exception_handler设置处理异常的方法,通过全部错误处理函数set_error_handler设置了处理错误的方法。当有代码中有异常或者错误设置的时候,如果上层没有进一步的异常处理机制,就会被整个全局函数捕捉,并加以处理。

来源:尘埃

时间: 2024-08-06 20:24:39

yii2框架的错误处理的相关文章

Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制

之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下: web ├─ common │ └─ models │ └ User.php └─ frontend ├─ config │ └ main.php └─ controllers └ BookController.php 二.格式化响应 Yii2 RESTful支持JSON和XML格式,如果想指定

Yii2框架bootstrap样式理解

Yii2框架默认采用了bootstrap作为CSS风格,各种视图类组件都如此.之前一直采用默认风格,并在必要的时候添加或者修改一下class来达到目的.但在改版Yii1.1的orange项目时,发现之前也是套的模板,其实没有好好去理解一下bootstrap的那套规则,所以顺便大致梳理一下吧.以basic模板为例,对照http://v3.bootcss.com/css/ 上的内容进行. 看layouts/main.php,Yii2默认以HTML5文档类型进行的了,但语言默认是en-US,所以要改,

Yii2框架RESTful API教程

前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RESTful的小伙伴快速入门. 一.目录结构 实现一个简单地RESTful API只需用到三个文件.目录如下: frontend ├─ config │ └ main.php ├─ controllers │ └ BookController.php └─ models └ Book.php 二.配置URL规则

YII2框架分析1:自动加载类

* YII2版本为 yii basic 2.0.0RC * YII2框架在 /vendor/yiisoft/yii2 目录下,所涉及文件都以此目录为基础 * 文本为个人学习内容,如有不正确的地方欢迎指正. 在web的入口文件index.php中有包含yii2的核心文件Yii.php require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php'); Yii.php 中 有一个类 Yii 继承自 \yii\BaseYii class Yii exten

[PHP]Yii2框架的坑

[PHP]Yii2框架的坑.md-/Users/zjh/Documents/我的文章/[PHP]Yii2框架的坑 html{font-family: sans-serif;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%}body{margin: 0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{displ

Yii2框架那些折磨人的坑

说点闲话 距离上次写博客,已经有一年了.在动手写之前,总是带着深深的罪恶感.被它折磨许久,终于,还是,动手了. 值得庆祝的一件事:最近开始健身了.每天动感单车45分钟,游泳45分钟,真的是(生)爽(不)到(如)爆(死). 好了,扯淡完毕,步入正题. ActiveRecord被莫名写入? 准备知识 ActiveRecord的基本用法.如果不理解,可参考这里. 代码现场 /** * @property integer $id * @property string $name * @property

YII2框架详解

yii2框架的安装我们在之前文章中已经提到下面我们开始了解YII2框架 Yii2的应用结构: 目录篇: advance版本的特点是:根目录下预先分配了三个模块,分别是前台.后台.控制台模块. 1.backend 它主要用于管理后台,网站管理员来管理整个系统. assets 目录用于存放前端资源包PHP类. 这里不需要了解什么是前端资源包,只要大致知道是用于管理CSS.js等前端资源就可以了. config 用于存放本应用的配置文件,包含主配置文件 main.php 和全局参数配置文件 param

Yii2框架RESTful API教程(一) - 快速入门

前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RESTful的小伙伴快速入门. 一.目录结构 实现一个简单地RESTful API只需用到三个文件.目录如下: frontend ├─ config │ └ main.php ├─ controllers │ └ BookController.php └─ models └ Book.php 二.配置URL规则

yii2 框架为什么难在中国国内推广开来?

晚上准备重新安装yii2框架,然后运行 composer global require "fxp/composer-asset-plugin:1.0.0" 足足花费了30分钟才运行完毕... 然后在运行 composer create-project --prefer-dist yiisoft/yii2-app-basic basic 一直都是等待,忍不住开VPN,结果悲剧的事情就开始了.网络断了,是断路由,一直都是连接. 一筹莫展的焦急用手机开窝蜂数据,搜索答案,15分钟之后,再刷新