0

0

处理 Yii 框架中的错误和异常:综合指南

王林

王林

发布时间:2023-09-02 15:17:01

|

1066人浏览过

|

来源于php中文网

原创

SEEK.ai
SEEK.ai

AI驱动的智能数据解决方案,询问您的任何数据并立即获得答案

下载

处理 yii 框架中的错误和异常:综合指南

简介

在今天的教程中,我将介绍 Yii 的错误和异常处理,并指导您完成一些介绍性场景。

想知道 Yii 是什么?查看我们的 Yii 框架简介和 Yii2 编程系列。

错误和异常之间有什么区别?

错误是我们代码中的意外缺陷,通常由用户首先发现。它们通常会中断程序的执行。重要的是,不仅要为用户优雅地中断,还要将问题告知开发人员,以便解决问题。

当发生潜在的可预测错误情况时,开发人员会创建异常。在可能发生异常的代码中,开发人员可以向健壮的错误处理程序抛出()异常。

Yii 如何管理这些?

在 Yii 中,非致命 PHP 错误(例如警告和通知)被路由到可捕获的异常中,以便您可以决定如何对它们做出反应和响应。您可以指定一个控制器操作来处理所有这些异常。您还可以自定义错误的显示格式,例如HTML、JSON、XML 等

异常和致命 PHP 错误只能在调试模式下评估。在这些类型的开发场景中,Yii 可以显示详细的调用堆栈信息和源代码片段(您可以在上面的标题图片中看到这一点)

致命错误是中断应用程序执行的事件类型。其中包括内存不足、实例化不存在的类的对象或调用不存在的函数。

例如:

$t = new Unknownobject();

让我们开始看一些错误和异常处理的示例。

配置错误和异常处理

首先,我们在 frontend/config/main.php 中配置我们的应用程序。 errorHandler 被定义为一个组件,如下所示。此示例来自我的启动系列应用程序 Meeting Planner。请注意 errorHandlercomponents 中的配置:

 'mp-frontend',
    'name' => 'Meeting Planner',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log','\common\components\SiteHelper'],
    'controllerNamespace' => 'frontend\controllers',
    'catchAll'=> [],
    'components' => [
      'assetManager' => [...],
      ...
      'errorHandler' => [
            'errorAction' => 'site/error',
            'maxSourceLines' => 20,
        ],
        ...
    ],
];

在上面的示例中,errorAction 将用户定向到我的 SiteController 的错误操作。

更广泛地说,Yii 为 errorHandler 提供了多种配置选项,用于重定向和数据收集:

属性 类型 描述
$callStackItemView 字符串 用于渲染异常和错误调用堆栈元素的视图文件的路径。例如'@yii/views/errorHandler/callStackItem.php'
$displayVars 数组 应显示在错误页面上的 PHP 预定义变量列表。例如['_GET'、'_POST'、'_FILES'、'_COOKIE'、'_SESSION']
$errorAction 字符串 用于显示外部错误的控制器操作的路由(例如 site/error)。
$errorView 字符串 用于渲染没有调用堆栈信息的异常的视图文件的路径。例如'@yii/views/errorHandler/error.php'
$异常视图 字符串 渲染异常的视图文件的路径。例如'@yii/views/errorHandler/exception.php'
$maxSourceLines 整数 要显示的最大源代码行数。
$maxTraceSourceLines 整数 要显示的最大跟踪源代码行数。
$previousExceptionView 字符串 用于渲染先前异常的视图文件的路径。例如'@yii/views/errorHandler/previousException.php'

使用 errorActions 直接执行

通常,当用户遇到严重错误时,我们希望将他们重定向到友好的、描述性的错误页面。

这就是 errorHandler 中的 errorAction 的作用。它重定向到我们的 SiteController 的 actionError:

return [
    'components' => [
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
    ]
];

在我们的 SiteController 中,我们定义了一个显式的 error 操作:

namespace app\controllers;

use Yii;
use yii\web\Controller;

class SiteController extends Controller
{
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }
}

这是一个基本的错误处理程序(您可以在此处阅读有关这些内容的更多信息):

public function actionError()
{
    $exception = Yii::$app->errorHandler->exception;
    if ($exception !== null) {
        return $this->render('error', ['exception' => $exception]);
    }
}

无论是否存在错误或页面请求是否在您的应用程序中不存在,您也可以做出不同的响应:

public function actionError()
    {
        $exception = Yii::$app->errorHandler->exception;
        if ($exception instanceof \yii\web\NotFoundHttpException) {
            // all non existing controllers+actions will end up here
            return $this->render('pnf'); // page not found
        } else {
          return $this->render('error', ['exception' => $exception]);
        }
    }

这是我当前的 Page Not Found 404 错误处理程序:

处理 Yii 框架中的错误和异常:综合指南

理论上,您可以包含链接的站点地图、与页面请求类似的建议页面、搜索功能和联系支持错误页面上的链接。所有这些都可以帮助用户恢复并优雅地继续前进。

这是我当前的一般错误页面(显然我需要添加功能)

处理 Yii 框架中的错误和异常:综合指南

捕获异常

如果我们想要监视一段代码是否存在问题,我们可以使用 PHP try catch 块。下面,我们将通过触发致命除以零错误进行实验:

use Yii;
use yii\base\ErrorException;

...

    try {
        10/0;
    } catch (ErrorException $e) {
        Yii::warning("Division by zero.");
    }
    
...

上面的 catch 响应是为日志生成警告。 Yii 有广泛的日志记录:

  • Yii::trace():记录一条消息以跟踪一段代码的运行情况。主要用于开发。
  • Yii::info():记录一条消息,传达有关事件的信息。
  • Yii::warning():记录发生意外事件的警告消息
  • Yii::error():记录一个致命错误以供调查

如果您希望将用户定向到我们之前配置的错误页面,而不是记录事件,则可以通过事件抛出异常:

use yii\web\NotFoundHttpException;

throw new NotFoundHttpException();

下面是我们抛出带有特定 HTTP 状态代码和自定义消息的异常的示例:

  try {
          10/0;
      } catch (ErrorException $e) {
        throw new \yii\web\HttpException(451,
            'Tom McFarlin\'s humor is often lost on me
                (and lots of people).');
    }

对于用户来说,该代码如下所示:

处理 Yii 框架中的错误和异常:综合指南

关于 Yii 日志记录

Yii 中的所有错误都会根据您的设置方式进行记录。您可能还对我有关用于登录 Yii 的 Sentry 和 Rollbar 的教程感兴趣:

  • 处理 Yii 框架中的错误和异常:综合指南

    构建您的初创公司:错误日志

    处理 Yii 框架中的错误和异常:综合指南

Yii

结束时

我希望您喜欢我们对错误和异常处理的探索。请关注我们的“使用 Yii2 编程”系列中即将推出的教程,我们将继续深入探讨该框架的不同方面。

如果您想更深入地了解 Yii 应用程序开发,请查看我们的使用 PHP 构建您的初创公司系列,该系列使用 Yii2 的高级模板。它讲述了对 Meeting Planner 的每个步骤进行编程的故事。如果您想从头开始学习如何在 Yii 中构建应用程序,它会非常有用。

如果您想知道下一个 Yii2 教程何时发布,请在 Twitter 上关注我@lookahead_io 或查看我的讲师页面。

相关链接

  • yii\web\ErrorHandler 文档
  • 处理错误(Yii 2.0 权威指南)
  • 日志记录(Yii 2.0 权威指南)
  • Yii2 Developer Exchange(作者的资源网站)

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

419

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

535

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

311

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1902

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2092

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1076

2024.11.28

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

228

2023.10.18

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

0

2026.01.30

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号