• Yii2 错误处理


    Yii 内置了一个error handler错误处理器,通过 yiiwebErrorHandler 类实现,它使错误处理更方便, Yii错误处理器做以下工作来提升错误处理效果:

    • 所有非致命PHP错误(如,警告,提示)会转换成可获取异常;
    • 异常和致命的PHP错误会被显示, 在调试模式会显示详细的函数调用栈和源代码行数。
    • 支持使用专用的控制器动作(eg:'site/error')来显示错误;
    • 支持不同的错误响应格式;
      error handler 错误处理器默认启用, 可通过在应用的入口脚本中定义常量YII_ENABLE_ERROR_HANDLER来禁用。

    注册应用组件:

    error handler 注册成一个名称为 errorHandler 应用组件,可以在应用配置(@app/config/main.php)中配置它类似如下:

    return [
        'components' => [
            'errorHandler' => [
                'errorAction' => 'site/error',
                'maxSourceLines' => 19,  // 默认值
                'maxTraceSourceLines' => 13,  // 默认值
                'discardExistingOutput' => true,  // 默认值
                'memoryReserveSize' => 262144,  // 默认值
            ],
        ],
    ];
    

    常用属性:

    yiiwebErrorHandler:
    $maxSourceLines        integer // 显示源代码的最大行数, 默认:19;
    $maxTraceSourceLines   integer // 显示跟踪源代码行的最大行数, 默认:13;
    $errorAction           string  // 用于显示外部错误的控制器动作的路由, eg:'site/error'
    $errorView             string  // 未调用堆栈元素时呈现异常和错误的视图文件, 默认:'@yii/views/errorHandler/error.php';
    $exceptionView         string  // 呈现异常的视图文件, 默认:'@yii/views/errorHandler/exception.php';
    $callStackItemView     string  // 调用堆栈元素时呈现异常和错误的视图文件, 默认:'@yii/views/errorHandler/callStackItem.php';
    $previousExceptionView string  // 呈现前一个异常的视图文件, 默认:'@yii/views/errorHandler/previousException.php';
    $displayVars           array   // 在错误页面上显示的PHP预定义变量列表, 默认:['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION'];
     
    yiiaseErrorHandler:
    $exception           Exception // 当前正在处理的异常
    $memoryReserveSize     integer // 保留内存的大小, 默认:262144;
    $discardExistingOutput boolean // 是否在错误显示之前抛弃现有的页面输出, 默认:true;
    

    抛出异常:

    use yiiwebNotFoundHttpException;
    public function actionView()
    {
        throw new NotFoundHttpException('未找到该记录');
    }
    

    抛出异常的常用类:

    yiiwebHttpException
    yiiwebBadRequestHttpException: 400
    yiiwebConflictHttpException: 409
    yiiwebForbiddenHttpException: 403
    yiiwebGoneHttpException: 410
    yiiwebMethodNotAllowedHttpException: 405
    yiiwebNotAcceptableHttpException: 406
    yiiwebNotFoundHttpException: 404
    yiiwebRangeNotSatisfiableHttpException: 416
    yiiwebServerErrorHttpException: 500
    yiiwebTooManyRequestsHttpException: 429
    yiiwebUnauthorizedHttpException: 401
    yiiwebUnprocessableEntityHttpException: 422
    yiiwebUnsupportedMediaTypeHttpException: 415
    

    异常类的使用:

    throw new NotFoundHttpException($message = null, $code = 0, Exception $previous = null);
    $message  string    // 错误信息
    $code     integer   // 错误代码
    $previous Exception // 用于异常链接的前一个异常
    

    创建错误处理动作:

    namespace appcontrollers;
    use Yii;
    use yiiwebController;
    class SiteController extends Controller
    {
        public function actions()
        {
            return [
                'error' => [
                    // 使用 yiiwebErrorAction 类,渲染 error 视图来显示错误
                    'class' => 'yiiwebErrorAction',
                ],
            ];
        }
        public function actionError()
        {
            $exception = Yii::$app->errorHandler->exception;
            if ($exception !== null) {
                return $this->render('error', ['exception' => $exception]);
            }
        }
    }
    

    视图(views/site/error.php)中可以访问的变量:

    $name: 错误名称
    $message: 错误信息
    $exception: 更多详细信息的异常对象,如HTTP 状态码,错误码,错误调用栈等。
    

    如果需要在错误处理程序中重定向,请按以下方式执行:

    Yii::$app->getResponse()->redirect($url)->send();
    return;
    

    原文地址: https://www.zhangmoxuan.com/article/view_100.html

  • 相关阅读:
    Asp.net2.0中的提供程序dashcommerce中的税率计算提供程序
    C#中的位操作
    一个很不错的日历控件
    统计商品留言信息,列出 已读,未读和总数
    Linq学习笔记
    TSQL 选择某一记录的前后相关记录
    XPath简明语法
    统计下载的周排行跟月排行
    二进制度序列化碰到的问题 切实认识Asp.net2.0页面编译机制
    Asp.net中Web.config 页面访问按角色授权配置
  • 原文地址:https://www.cnblogs.com/meetuj/p/14567013.html
Copyright © 2020-2023  润新知