異常のためTP5は、デバッグモードでは、返されたエラーページの様々な種類の形式で直接表示されます。デバッグシャットダウン、ディスプレイの場合
ページフォールト!〜後ほど再度お試しください
//登録エラーと例外処理 エラー::レジスタ();
自己:: getExceptionHandler() - >レンダリング($ E) - >送信()
getExceptionHandlerは()クラスを扱う全くカスタム例外は\例外\ハンドルハンドリング(すなわちデフォルトの取り扱いTP5)が異常だと思う名前空間はデフォルトでは存在しない場合、存在しない決定します。
そして、我々は、名前空間内の関数は、操作の定義に\アプリケーションを考える初期化することができ、カスタム例外クラスの定義に設定されている場合、そのクラスを扱うカスタム例外を使用しています。それは、クラスをハンドルではありません。
一般的なアイデアは、我々は特定の操作を開始するということです
まず第一に、私は新しい名前空間のアプリ\共通\例外\ ApiHandleExceptionクラスです
<?phpの / ** * PhpStormによって作成されます。 *ユーザー:wangjing4 *日:2019年12月17日 *時間:午前9時19分 * / 名前空間のアプリ\共通\例外。 例外を使用します。 \例外\ハンドルを考えて使用します。 \例外\ HttpExceptionを考えて使用します。 \例外\ ErrorExceptionを考えて使用します。 \例外\ PDOExceptionを考えて使用します。 使用はファサード\ログ\と思います。 クラスApiHandleExceptionが延びてハンドル { パブリック関数レンダリング(例外の$ e)は { (コンフィグ( 'app_debugは')){場合 、戻り親は::($ e)のレンダリング。 }他{ $ [ 'ApiError次'] =の$ this - > getApiError($ e)をログ; $ログ[ 'のgetData'] = $ _GET。 $ログ[ 'POSTDATA'] = $ _POST; $ログ[ 'headerData'] = $ _SERVER; $再=の$ this - > recordErrorLog($ログ)。 IF($ Eのinstanceof HttpException){ リターンJSON(配列( 'MSG' => '请求错误'、 'コード' => 400)); } IF($ Eのinstanceof ErrorException){ リターンJSON(配列( 'MSG' => '返回异常'、 'コード' => 500)); } IF(PDOExceptionのinstanceof $ E){ リターンJSON(配列( 'MSG' => "SQL异常"、 'コード' => 600)); } } } プライベート関数getApiError($ E){ $データ= []; もし(HttpException instanceofは$ e)の{ $データ[ 'MSG' ] =は$ e-> getMessage()の; } IF(ErrorExceptionのinstanceof $ E){ $データ[ 'MSG'] = $ E->のgetMessage()。 $データ[ 'ファイル'] = $ E->はgetFile(); $データ[ '行'] = $ E->のgetline(); } IF(PDOExceptionのinstanceof $ E){ $データ[ 'MSG'] = $ E->のgetData( 'データベースステータス')。 } $のデータを返します。 } プライベート関数recordErrorLog($データ) { ログイン::レコード($データ'エラー'); } }
次に、設定ファイルで定義されました
'exception_handle' => '\アプリ\共通\例外\ ApiHandleException'、
私たちは、クラスの独自の定義は、例外処理を引き継ぎました。
以下のような具体的なアイデアApiHandleExceptionの外観。私たちは、それが最終的にrenderメソッドのクラスを置き換えることで、実際には、例外処理の新しいクラスを可能に
だから、新しい方法をレンダリングします。まずApiHandleExceptionは確かにハンドルファーストクラスを継承しています。我々は、モードデバッグ再とき、ほとんどの
私たちは、郵便配達のツールをデバッグするためのインターフェースを使用することを書いています。この時点で、デフォルトページTP5我々の見解を間違ったために非常に適して投げ。デフォルト我々はそう
renderメソッドでハンドルが有効になっています。そして、生産は、デバッグモードを閉じたとき。この時点で、私たちはスロー彼らのクラスの異常に基づくことができます
実質的にリターンメッセージ
IF($ Eのinstanceof HttpException){ リターンJSON(配列( 'MSG' => '请求错误'、 'コード' => 400)); } IF($ Eのinstanceof ErrorException){ リターンJSON(配列( 'MSG' => '返回异常'、 'コード' => 500)); } IF(PDOExceptionのinstanceof $ E){ リターンJSON(配列( 'MSG' => "SQL异常"、 'コード' => 600)); }
私自身のデバッグのうち、例外これらのタイプ。基本的に3つの例外エラー。
あなたは、コントローラまたはメソッドにアクセスするとそれは、\例外を考えることになる\ HttpException存在しません。クラスがスローされました。
ページコードのスペルが間違った場合、それは一般的には、\は例外だと思いますされ\ ErrorExceptionは500エラーを報告しました。
間違ったSQL文によって引き起こされる問題は、\例外\ PDOException投げを考えるときに
本番環境は、ログインする必要があるとき、私はエラーに応じて、デフォルトのログ方法TP5を使用し、エラーのタイプごとに、基本的な情報の保存、必ずバックエンドはすぐにログに応じて問題を見つけてください。
例えばHttpExceptionエラー、エラー例外自体は基本的にどこに問題が嘘知ることができます。
ErrorExceptionは、エラーファイル、エラーの行番号とプロンプトのエラーを見つけることがあります。
PDOExceptionエラーに直面すると、デフォルトのPDOのエラー情報データのエラークラス・レコードは、私たちはすぐに、SQLエラーを知って支援します