2

プロジェクトで 2 つの異なる種類の例外を使用したいと考えています。

  1. 致命的な例外。mysql クエリが失敗するなど、予期せぬ問題が発生した場合、必ずしもキャッチする必要はなく、この種の例外をスローしたいと考えています。この例外は、CodeIgniter の show_error() 関数を使用して、メッセージをログに記録してからエラーを表示するなど、何らかのアクションを実行する必要があることを意味します。スクリプトは続行せずに終了する必要があります。

  2. エラー例外。ユーザーが数字フィールドに文字を入力したり、許可されていないページにアクセスしたりするなど、許可されていないことを行った場合、この例外をスローしてキャッチする必要があります。

プロジェクト全体で両方の種類の例外を使用したいと考えています。番号 2 は十分に明確ですが、例外 1 を実行するにはどうすればよいですか? 最初のタイプはグローバルであり、常に同じである必要があるため、try ブロックごとに 2 つの catch ブロックを使用する必要がないことは素晴らしいことです: ログ メッセージ、エラーの表示、終了。そして最後に、codeigniter では、例外クラスを拡張する正しい場所はどこでしょうか?

ありがとう。

4

1 に答える 1

0

致命的な例外

上記の Sunil が投稿したリンクは、 Fatal Exceptions をグローバルに処理するのに最適です。これらの例外のスローには細心の注意を払う必要があります。また、エンド ユーザーにとって、サイトが恐ろしく壊れているように見えないようにする必要があります

エラーの例外

数値フィールドのテキストなどのエラーは例外として扱わないほうがよいと思います。エラーはプログラムの命令の通常の流れを妨げないからです。

ユーザーが数値フィールドに英字を入力してフォームを送信した場合、アプリケーションは、ユーザーがジャンク データを提供する可能性があることを想定する必要があり、通常のフローである入力プロセスを繰り返します。

コード イグナイターでシナリオ 2 を処理する方法は次のとおりです。

  1. CI_Logで拡張/application/libraries/MY_Log
  2. MY_Log::$logsログレベルが許せば配列にメッセージを保存するために追加
  3. テンプレート フックはログを取得し、ログ レベルの適切なメッセージ ボックスMY_Log::get_logs()を表示するビューに渡します。

と呼ばれるカスタム ログ レベルも実装しますerror_log。これは、ユーザーを表示せずにログ ファイルに送信したいものです。

于 2013-07-31T13:40:54.403 に答える