ホームページ > バックエンド開発 > PHPチュートリアル > Yii フレームワークでのエラーと例外の処理: 包括的なガイド

Yii フレームワークでのエラーと例外の処理: 包括的なガイド

王林
リリース: 2023-09-02 15:18:02
オリジナル
812 人が閲覧しました

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

###導入######

今日のチュートリアルでは、Yii のエラーと例外処理を紹介し、いくつかの入門シナリオを案内します。

Yii とは何か知りたいですか? Yii フレームワークと Yii2 プログラミングの紹介シリーズをご覧ください。

エラーと例外の違いは何ですか?

バグとはコード内の予期せぬ欠陥であり、多くの場合、ユーザーが最初に発見します。通常、これらはプログラムの実行を中断します。ユーザーのために正常に中断するだけでなく、問題を修正できるように開発者に問題を通知することも重要です。

開発者は、予測可能なエラー状態が発生した場合に例外を作成します。例外が発生する可能性のあるコードでは、開発者は強力なエラー ハンドラーに対して throw() 例外を送信できます。

Yii はこれらをどのように管理しますか?

Yii では、致命的ではない PHP エラー (警告や通知など) はキャッチ可能な例外にルーティングされるため、それらにどのように反応して対応するかを決定できます。これらすべての例外を処理するコントローラー アクションを指定できます。 HTML、JSON、XML などのエラー表示形式をカスタマイズすることもできます。

例外と致命的な PHP エラーは、デバッグ モードでのみ評価できます。このようなタイプの開発シナリオでは、Yii は詳細なコールスタック情報とソースコードスニペット

(これは上のヘッダー画像で確認できます)

を表示できます。

致命的エラーは、アプリケーションの実行を中断するイベントの一種です。これには、メモリ不足、存在しないクラスのオブジェクトのインスタンス化、存在しない関数の呼び出しなどが含まれます。 ###例えば:### リーリー

まず、エラーと例外処理の例をいくつか見てみましょう。

設定エラーと例外処理

まず、frontend/config/main.php でアプリケーションを構成します。 errorHandlerは以下のようにコンポーネントとして定義されています。この例は、私のスタートアップ シリーズ アプリケーションである Meeting Planner からのものです。

components

errorHandler

の設定に注意してください:

リーリー 上記の例では、errorAction はユーザーを SiteController のエラー アクションに誘導します。

より広範に、Yii はリダイレクトとデータ収集のために

errorHandler のさまざまな設定オプションを提供します:

属性

###タイプ### ###説明する### $callStackItemView 例外およびエラーの呼び出しスタック要素をレンダリングするために使用されるビュー ファイルへのパス。例: '@yii/views/errorHandler/callStackItem.php'$displayVars ###配列### エラーページに表示される PHP 定義済み変数のリスト。例: ['_GET'、'_POST'、'_FILES'、'_COOKIE'、'_SESSION']$エラーアクション外部エラーを表示するコントローラー アクションのルート (例: site/error)。 $エラービュー呼び出しスタック情報なしで例外をレンダリングするために使用されるビュー ファイルへのパス。例: '@yii/views/errorHandler/error.php'$例外ビュー例外をレンダリングするビュー ファイルへのパス。例: '@yii/views/errorHandler/Exception.php'$maxSourceLines ###整数### 表示するソースコードの最大行数。 $maxTraceSourceLines表示するトレース ソース コードの最大行数。 $前の例外ビュー 前の例外をレンダリングするために使用されたビュー ファイルへのパス。例: '@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(作者的资源网站)
###弦###
###弦###
###弦###
###弦###
###整数###
###弦###

以上がYii フレームワークでのエラーと例外の処理: 包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート