例外 それらを使用する場所

「例外を正しく使用する方法」を読んでコメントした後、例外を使用する短い記事を書くことにしました。「正しく」する方法ではなく、すべてが経験に基づいて簡潔かつ簡潔に説明します。


ロジック


  1. データの検証:言い換えると、入力データのエラー、フィールドの形式が同じではなく、フィールドが入力されていない、フィールドの一意性のエラーが入力データのすべてのエラーである場合、そのような場合、ユーザーに表示されるすべてのフィールドとエラーをリストする実行をドロップします。
  2. 404ドキュメントが見つかりませんでした:特定のエンティティ(たとえば、データベースからの行)がその識別子によって(だけでなく)要求された場合、存在しない場合、実行がスローされ、後でページ404に変わります。
  3. 403アクセスが拒否されました:アクセスできないユーザーにアクセスしようとした場合、実行がスローされ(アクセスできない理由を引数に渡すことができます)、後で403に変わります。
  4. 401認証が必要:ユーザーは認証が必要なデータを要求します。 実行を破棄し(引数でRelarm-承認要求のテキストを渡すことができます)、ユーザーはHTTP承認の要求または通常のフォームを受け取ります。
  5. 301リダイレクト:リダイレクトする必要がありますか? 実行をスローします-その中で、リダイレクトする必要がある場所に転送します。

間違い


  1. 致命的なエラー:ここではすべてが明らかであるか、データベースへの接続がないか、構成を読み取ることができません。 ログに書き込み、損傷を表示するだけです。
  2. 重大なエラー:たとえば:SMSkaが送信されず、ファイルをアップロードできません-特定の実行をスローします。 そして、適切な場所(たとえば、電話の確認)で、それを処理し、SMSを送信できないことをユーザーに書き込みます。

デバッグ


デバッグモードでは、 PHP_Exceptionizerを使用しますここで説明します )。 コードをきれいにし、通知や警告を受信に変えることができます。これにより、それらを見逃すことがなくなります。 当然、これはデバッグモードでのみ有効になります。


また、「誤解された」すべての実行を記録することをお勧めします。

class Controller_Front
{
//
public function execute()
{
try {
...
//
try {
... //
// .
throw new Controller_RedirectException( 'http://habr.ru' );
...
} catch (Controller_DataException $e) {
//
$ this ->errors = $e->getErrors();
}
...
} catch (Controller_RedirectException $e) {
// ,
$ this ->_processRedirectException($e);
} catch (Controller_AuthException $e) {
// , HTTP
$ this ->_processAuthException($e);
} catch (Exception $e) {
// .
$ this ->_logException($e);
// .
$ this ->_processFatalException($e);
}
}
}


* This source code was highlighted with Source Code Highlighter .


これまでのところ、PHPブログに転送するのに十分なカルマはありません。 転送されたカルマをありがとう。

Source: https://habr.com/ru/post/J58702/


All Articles