検索
ホームページバックエンド開発PHPチュートリアルYii Framework 公式ガイド シリーズ 46 - 特別トピック: エラー処理



Yii は、PHP5 例外処理に基づいた完全なエラー処理メカニズムを提供します。アプリケーションの実行が開始され、ユーザーのリクエストが処理されると、PHP の警告と通知情報を処理するために handleError メソッドが登録されます。また、キャッチされなかった PHP 例外を処理するために handleException メソッドも登録されます。したがって、アプリケーションの実行中に PHP の警告/通知、またはキャッチされなかった PHP 例外が発生した場合、エラー ハンドラーが制御を引き継ぎ、必要な処理メカニズムを実行します。

ヒント: エラー ハンドラーは、PHP 関数 set_Exception_handler および set_error_handler を使用して、アプリケーションのコンストラクター メソッドに登録されます。 Yii にエラーや例外を処理させたくない場合は、エントリーファイルで YII_ENABLE_ERROR_HANDLERYII_ENABLE_EXCEPTION_HANDLER を false として定義できます。YII_ENABLE_ERROR_HANDLERYII_ENABLE_EXCEPTION_HANDLER为false.

默认情况下,在触发onError事件(或onException事件)的时候,errorHandler(或exceptionHandler)将被触发。如果错误或者异常未被任何事件所处理,那么就需要运行errorHandler组件来处理了。

1. 引发异常

在Yii中引发异常和在普通PHP文件中没什么两样。你可以使用下面的代码来抛出异常:


throw new ExceptionClass('错误信息');

Yii定义了两个异常类:CException和CHttpException。前者是一个通用的异常类,而后者用于对最终用户显示异常信息。同时,后者有一个statusCode属性来代表HTTP状态码。异常的类型决定了显示效果,下面会细说。

提示: 想要告诉用户某个操作是错误的,那么引发一个CHttpException异常是最简单的方法了。比如说,如果用户在URL中提供了一个无效的ID值,我们可以显示一个404错误:


// 如果提交的ID是无效的
throw new CHttpException(404,'此页面不存在');

2. 显示错误

当一个错误被转发给组件CErrorHandler的时候,它会选择合适的视图来显示错误。如果这个错误要显示给最终用户的(比如说一个CHttpException)那么会使用名为errorXXX的视图来显示错误。这个XXX代表着HTTP错误码(比如说400,404,500等)。如果这是个内部错误,应该只能被开发者看到,那么将使用的视图名是exception。在后一种中,将会显示完整的调用栈信息和错误行信息。

信息: 当应用运行在生产模式时,所有的错误,包括内部错误都会使用视图errorXXX。这是因为调用的栈信息和错误行信息可能包含一些敏感信息。这种情况下,开发者应该依靠错误日志来确定错误原因。

CErrorHandler会搜索合适的视图来显示错误信息,搜索的顺序如下:

  1. WebRoot/themes/ThemeName/views/system: 在当前主题视图下的system目录中。

  2. WebRoot/protected/views/system: 在应用的默认视图的system目录中。

  3. yii/framework/views: 在Yii提供的标准视图目录中。

因此,如果你想要自定义错误显示,可以直接在system视图目录中或者主题的system视图目录中创建一个视图文件。每个视图文件都是一个包含许多HTML代码的普通PHP文件。参考框架的view目录下的文件,可以获得更多信息。

3. 使用一个动作来处理错误

Yii也可以使用控制器 动作来处理错误显示。实现的方法是在应用的配置文件中配置一个错误处理器。


return array(
    ......
    'components'=>array(
        'errorHandler'=>array(
            'errorAction'=>'site/error',
        ),
    ),
);

上面的代码中,我们配置了CErrorHandler::errorAction属性,属性值是一个路由site/error。这个路由指向SiteController中的error。当然,你也可以使用其他的路由。

我们可以这样来编写error动作:


public function actionError()
{
    if($error=Yii::app()->errorHandler->error)
        $this->render('error', $error);
}

在这个动作中,首先从CErrorHandler::error中取得详细的错误信息。如果取得的信息非空,就使用CErrorHandler::error返回的信息来渲染error视图。CErrorHandler::error返回的信息是一个数组,结构如下:

  • code: HTTP 状态码(比如 403, 500);

  • type: 错误类型(比如 CHttpException, PHP Error);

  • message: 错误信息;

  • file: 发生错误的PHP文件名;

  • line: 错误所在的行;

  • trace: 错误的调用栈信息;

  • source

    デフォルトでは、トリガー onError イベント (または onException イベント) が発生すると、errorHandler (または例外ハンドラー) がトリガーされます。エラーまたは例外がどのイベントでも処理されない場合は、errorHandler コンポーネントを実行してそれを処理する必要があります。 🎜

    1. 例外のスロー

    🎜 Yii での例外のスローは、通常の PHP ファイルと何ら変わりません。次のコードを使用して例外をスローできます。 🎜🎜🎜🎜🎜🎜rrreee🎜🎜🎜Yii は 2 つの例外クラス、CException と CHttpException を定義します。前者は一般的な例外クラスであり、後者はエンド ユーザーに例外情報を表示するために使用されます。同時に、後者には、HTTP ステータス コードを表す statusCode 属性があります。例外のタイプによって表示効果が決まります。これについては後で詳しく説明します。 🎜🎜🎜🎜 ヒント: 🎜 特定の操作が間違っていることをユーザーに伝えたい場合は、CHttpException をスローするのが最も簡単な方法です。たとえば、ユーザーが URL に無効な ID 値を指定した場合、404 エラーを表示できます。 🎜🎜🎜🎜🎜🎜rrreee🎜🎜

    2. Show error

    🎜When aエラーはコンポーネント CErrorHandler に転送され、エラーを表示する適切なビューが選択されます。エラー (CHttpException など) がエンド ユーザーに表示される場合は、errorXXX という名前のビューを使用してエラーが表示されます。この XXX は HTTP エラー コード (400、404、500 など) を表します。これが開発者のみに表示される内部エラーである場合、使用されるビュー名は Exception です。後者の場合、完全なコールスタック情報とエラー行情報が表示されます。 🎜🎜🎜🎜情報: 🎜 アプリケーションが運用モードで実行されている場合、内部エラーを含むすべてのエラーはビュー errorXXX を使用します。これは、コール スタック情報とエラー行情報には機密情報が含まれている可能性があるためです。この場合、開発者はエラー ログを利用してエラーの原因を特定する必要があります。 🎜🎜CErrorHandler はエラー メッセージを表示するための適切なビューを検索します。検索順序は次のとおりです: 🎜
    1. 🎜WebRoot/themes/ThemeName/ views/ system: 現在のテーマビューの下の system ディレクトリ内。 🎜
    2. 🎜WebRoot/protected/views/system: アプリケーションのデフォルト ビューの system ディレクトリ内。 🎜
    3. 🎜yii/framework/views: Yii が提供する標準ビューディレクトリ内。 🎜
    🎜 したがって、エラー表示をカスタマイズしたい場合は、system ビュー ディレクトリまたはテーマの system ビュー ディレクトリに直接作成できます。ビューファイル。各ビュー ファイルは、多くの HTML コードを含む通常の PHP ファイルです。詳細については、フレームワークの view ディレクトリ内のファイルを参照してください。 🎜

    3. アクションを使用してエラーを処理する

    🎜Yii は、コントローラー アクションを使用してエラー表示を処理することもできます。これは、アプリケーションの構成ファイルでエラー ハンドラーを構成することによって実現されます。 🎜🎜🎜🎜🎜🎜rrreee🎜🎜🎜 上記のコードでは、CErrorHandler::errorAction 属性を構成し、属性値はルート site/error です。このルートは、SiteControllererror を指します。もちろん他のルートを利用することも可能です。 🎜🎜error アクションは次のように記述できます: 🎜🎜🎜🎜🎜🎜rrreee🎜🎜🎜 このアクションでは、まず CErrorHandler::error から詳細なエラー情報を取得します。取得した情報が空でない場合は、CErrorHandler::error によって返された情報を使用して error ビューをレンダリングします。 CErrorHandler::error によって返される情報は、次の構造を持つ配列です: 🎜
    • 🎜code: HTTP ステータス コード (403、 500); 🎜
    • 🎜type: エラーの種類 (CHttpException、PHP Error など); >message code>: エラーメッセージ; 🎜
    • 🎜file: エラーが発生した PHP ファイル名 🎜
    • 🎜line: error エラーが発生した行 🎜
    • 🎜trace: エラー コール スタック情報 🎜
    • 🎜source code>: エラーが発生したコードコンテキスト。 🎜

    ヒント: CErrorHandler::error が空かどうかを確認する理由は、error アクションにユーザーがアクセスでき、現時点ではエラーがない可能性があるためです。 $error 配列をビューに渡すと、その配列は独立変数として自動的に解放されます。したがって、ビューでは $code$type を使用してこの情報にアクセスできます。 error动作可以被用户访问到,这时候也许并没有什么错误。当我们传递$error数组给视图,它将会被自动释放为独立的变量。所以,在视图中我们可以使用$code$type来访问这些信息。

    4. 消息记录 

    一个error级别的错误信息会在错误发生时候被记录。如果这个错误是由PHP warning 或 notice引发的,那么这个消息将会被记录在php这个分类中;如果错误信息是由未捕获的异常所引起的,那么分类将是exception.ExceptionClassName

    4. メッセージの記録

    エラーが発生した場合、error レベルのエラー メッセージが記録されます。エラーが PHP の警告または通知によって引き起こされた場合、メッセージは php カテゴリに記録されます。エラー メッセージがキャッチされなかった例外によって引き起こされた場合、カテゴリは Exception.ExceptionClassName になります。 (CHttpException の場合、その statusCode もクラス名に追加されます)。開発者はこれらのレコードを使用して、アプリケーション実行中のエラー メッセージを監視できます

    上記は、Yii Framework 公式ガイド シリーズ 46 - 特別トピック: エラー処理です。関連コンテンツの詳細については、PHP 中国語 Web サイト (www.php.cn) を参照してください。 !


    🎜🎜
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?Apr 17, 2025 am 12:24 AM

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHP対Python:ユースケースとアプリケーションPHP対Python:ユースケースとアプリケーションApr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター