yii2框架的错误处理

   2016-12-23 0
核心提示:在查找yii2相关开发资料过程中发现很多人对yii2的错误处理流程不清楚,尤其是经常有一些疑惑,比如”为什么我的程序一旦出现问题,就会自动打印出错误呢?它是怎么监听的?在哪里用的try catch?”,下面我详细的描述一下错误处理流程。预定义开启错误处理常

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

预定义开启错误处理常量

# \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设置了处理错误的方法。当有代码中有异常或者错误设置的时候,如果上层没有进一步的异常处理机制,就会被整个全局函数捕捉,并加以处理

 
标签: Yii
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Yii 框架学习:如何复制一个Ruby on Rails。
    Yii 框架学习:如何复制一个Ruby on Rails。
     早上在ruby-china发了个帖子,询问“现今PHP的框架中最接近RAILS的是什么?”大部分答曰"Yii”。所以晚上回来就来学下这个框架看看。 Yii 是一个基于组件、纯OOP的、用于开发大型 Web 应用的高性能 PHP 框架。 下载回来的软件包解压后结构如下:CHANGELOG
    02-09
  • yii 隐藏index.php
        首先,开启apache的rewrite模块    去掉rewrite前的#,如下所示    LoadModule rewrite_module modules/mod_rewrite.so     接着,在yii的index.php同级目录建立.htaccess文件,内容如下    IfModule mod_rewrite.c       Optio
    02-09
  • php Yii2框架创建定时任务方法详解
    目录简单的定时任务脚步文件传递参数设置参数别名在Linux配置crontab在我们项目开发中,需要使用定时任务来完成批处理业务,下面通过Yii2框架来实现定时任务Yii2框架定时任务代码统一放在 ./console 目录下简单的定时任务脚步文件首先在console/controller目
  • yii2的数据库层设计
    Yii2在M层的抽象做的很经典,值得分析理解。QueryBuilder不同的数据库引擎(mysql,oracle…)执行相同的SQL,可能语法有一些细微的差异,但是SQL整体语法差别不大,所以会定义一个QueryBuilder基类,它提供一般通用的SQL生成方法,具体每个数据库引擎继承Quer
    02-05 SQLYii
  • 码云推荐 | 基于Yii2的后台开源骨架 openadm-yi
    OpenAdmOpenAdm是一个基于Yii2的后台开源骨架,集成了用户和插件系统,使用主题功能,默认使用AdminLTE2的模板的主题,可以非常方便的开发新的功能。Demo地址:http://yii2.openadm.com后台账号: admin后台密码: admin仓库地址:OSC:https://git.oschina.net/xiong
    02-05 Yii开源
  • Yii2配置多语言
    我的YII2版本是2.0.7, 设置多语言时和其他教程有不同的地方, 所以整理如下1. 在一个controller里面写一个调用i18n的语句, 比如actionIndexecho \Yii::t('app', 'whatisthis');现在进入这个页面, 页面输出whatisthis2. 手动创建一个文件夹messages来存放多语言
    02-05 Yii
  • Yii2 的问题解决方案
    Yii2 的问题解决方案
    yii2 Class 'app\controllers\AccessControl' not found一般是命名空间问题, 写成\yii\filters\AccessControl::className(),yii2想要新增第三方vendor, 修改composer.json,require-dev: {yiisoft/yii2-codeception: *,yiisoft/yii2-debug: *,yiisoft/yii2-gii
    02-05 Yii
  • Yii 2.0.11.1 发布,高性能 PHP 框架
    Yii 2.0.11.1 发布了。Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的开发。 更新内容: Bug #11502: Fixed yii\
    02-05 Yii高性能
  • 码云推荐 | 基于 yii2 的快速配置 api 服务 yii2-fast-api
    码云推荐 | 基于 yii2 的快速配置 api 服务 yii
    yii2-fast-api yii2-fast-api是一个Yii2框架的扩展,用于配置完善Yii2,以实现api的快速开发。此扩展默认的场景是APP的后端接口开发,因此偏向于实用主义,并未完全采用restfull的标准,方便前端开发处理接口数据以及各种异常。Installation 使用 Composer 安
    02-05 YiiAPI
  • 简述Yii2里的AOP思想
    AOP是什么在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP解决什么将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过
    12-23 AOPYii
点击排行