您好,欢迎访问一九零五行业门户网

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

简介
在今天的教程中,我将介绍 yii 的错误和异常处理,并指导您完成一些介绍性场景。
想知道 yii 是什么?查看我们的 yii 框架简介和 yii2 编程系列。
错误和异常之间有什么区别? 错误是我们代码中的意外缺陷,通常由用户首先发现。它们通常会中断程序的执行。重要的是,不仅要为用户优雅地中断,还要将问题告知开发人员,以便解决问题。
当发生潜在的可预测错误情况时,开发人员会创建异常。在可能发生异常的代码中,开发人员可以向健壮的错误处理程序抛出()异常。
yii 如何管理这些?在 yii 中,非致命 php 错误(例如警告和通知)被路由到可捕获的异常中,以便您可以决定如何对它们做出反应和响应。您可以指定一个控制器操作来处理所有这些异常。您还可以自定义错误的显示格式,例如html、json、xml 等
异常和致命 php 错误只能在调试模式下评估。在这些类型的开发场景中,yii 可以显示详细的调用堆栈信息和源代码片段(您可以在上面的标题图片中看到这一点)。
致命错误是中断应用程序执行的事件类型。其中包括内存不足、实例化不存在的类的对象或调用不存在的函数。
例如:
$t = new unknownobject();
让我们开始看一些错误和异常处理的示例。
配置错误和异常处理首先,我们在 frontend/config/main.php 中配置我们的应用程序。 errorhandler 被定义为一个组件,如下所示。此示例来自我的启动系列应用程序 meeting planner。请注意 errorhandler 在 components 中的配置:
<?php$params = array_merge( require(__dir__ . '/params.php'), require(__dir__ . '/params-local.php'));return [ 'id' => '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 错误处理程序:
理论上,您可以包含链接的站点地图、与页面请求类似的建议页面、搜索功能和联系支持错误页面上的链接。所有这些都可以帮助用户恢复并优雅地继续前进。
这是我当前的一般错误页面(显然我需要添加功能):
捕获异常如果我们想要监视一段代码是否存在问题,我们可以使用 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 的 sentry 和 rollbar 的教程感兴趣:
构建您的初创公司:错误日志如果没有正确的错误处理或基于云的日志服务,查找生产错误可能会很困难。我尝试了两个。跟随并了解如何记录...
yii
结束时我希望您喜欢我们对错误和异常处理的探索。请关注我们的“使用 yii2 编程”系列中即将推出的教程,我们将继续深入探讨该框架的不同方面。
如果您想更深入地了解 yii 应用程序开发,请查看我们的使用 php 构建您的初创公司系列,该系列使用 yii2 的高级模板。它讲述了对 meeting planner 的每个步骤进行编程的故事。如果您想从头开始学习如何在 yii 中构建应用程序,它会非常有用。
如果您想知道下一个 yii2 教程何时发布,请在 twitter 上关注我@lookahead_io 或查看我的讲师页面。
相关链接yii\web\errorhandler 文档处理错误(yii 2.0 权威指南)日志记录(yii 2.0 权威指南)yii2 developer exchange(作者的资源网站)以上就是处理 yii 框架中的错误和异常:综合指南的详细内容。
其它类似信息

推荐信息