ホームページ  >  記事  >  PHPフレームワーク  >  yii2 カスタムエラー処理

yii2 カスタムエラー処理

(*-*)浩
(*-*)浩オリジナル
2019-12-14 09:34:203323ブラウズ

yii2 カスタムエラー処理

Yii2 を使用すると、プログラムでエラーが発生すると、Yii2 は専用のエラー プロンプト インターフェースを自動的に表示できることがわかりました。これは、開発時に表示されるエラー プロンプト インターフェースとはまったく異なります。オリジナルの生態を書きました。

それはどのように行われますか: 監視はどこに設定されますか?またはどこで try catch を使用しますか? (推奨学習: yii Framework)

実は、PHP には専用のエラー処理 API があり、プログラムに問題が発生したときに、指定された関数を自動的に呼び出すことができます。 Yii2 はこれを利用し、起動時に PHP の組み込み set_error_handler を使用して独自のエラー処理を登録し、PHP 独自のエラー表示をオフにします。

公式チュートリアルでは、カスタム エラーを有効にするには、コンポーネントを次のように設定する必要があることが示されています:

return [
    // ...
    
    'components' => [
        // ...
        
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
    ]
    
    // ...
];
Yii2 エラー コアの処理メソッド

Yii2 の場合 エラーのカスタマイズ処理では、Yii2 のエラー登録の原理を理解し、エラーが発生した後、Yii2 が yii\web\ErrorHandler クラス オブジェクトの handleException メソッドと handleError メソッドを呼び出すことがわかります。

実際には、yii\web\ ErrorHandler クラスには handleException メソッドと handleError メソッドはありませんが、その基本クラス yii\base\ErrorHandler にはあります。これら 2 つの関数は、最終的に yii\web\ErrorHandler の renderException メソッドを呼び出します。コードは次のとおりです:

# yii\web\ErrorHandler
/**
 * Renders the exception.
 * @param \Exception $exception the exception to be rendered.
 */
protected function renderException($exception)
{
    // ...
    // 注意:控制错误是否能自定义的关键
    // !YII_DEBUG 表示了如果你现在是在 Debug 模式下,那么不能自定义错误
    // 即使你配置了组件的 'errorHandler' => ['errorAction' => 'site/error'] 参数
    $useErrorView = $response->format === Response::FORMAT_HTML && (!YII_DEBUG || $exception instanceof UserException);
    // 传递到自定义错误处理方法
    if ($useErrorView && $this->errorAction !== null) {
        $result = Yii::$app->runAction($this->errorAction);
        if ($result instanceof Response) {
            $response = $result;
        } else {
            $response->data = $result;
        }
    }
    
    // ...
}
最後のエラー表示メソッド renderException で、カスタマイズされたエラーを有効にするには非 DEBUG モードにする必要があることがわかります。

以上がyii2 カスタムエラー処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。