fuelphpのエラーハンドリングがややこしい。処理記述箇所が複数有るっぽいのがそもそもの原因。
追記1014:なんか違うっぽかったので修正しました。
##基本的な流れ(ExceptionHandler系)
catchサれなかった例外に対する処理は次の通り
- handleメソドの有無を調べてアレば実行
- handleが無くて本番環境なら,
errors/production
をレンダする。 - handleが無くて本番でも無ければ、
errors/php_fatal_error
をレンダする。
こんなかんじの流れ。handleメソド実装しとけばとりあえずなんでも出来る、って感じになってる。
本番かどうかはFuel::$env === 'production'
で判定。
自動レンダするerrors/production.php
はFinder_Path依存で。デフォルトの表示はCoreの方のFinder_Pathから持ってきてる。appに置いたら上書き出来る。というか間違えて置かないように。
##ルーティング設定周りの処理(自動catch)
上記は未catchの例外に対して適用される処理。fuelphpでは結果を生成する際、内部でHttpNotFoundException
のみ自動でcatchする。
catchして何をするかというとルーティング設定の_404_ディレクティブを見てこちらに飛ばそうとする。_404_
設定が有効でなければパススルーでまた例外をそのままthrowする。
##組み込み例外
基本的には例外はhandleメソド持ってないので,未catch例外に対しては上で言う2.3.あたりの処理が行われる(通常のエラー画面)。
が、中にはいくつかhandleメソド実装済みの組み込み例外も存在するよう。
###HttpServerErrorException
handle内ではviews/500.php
のレンダが指示されている。
###HttpNotFoundException
handle内ではviews/404.php
のレンダが支持されている。
これらは全てHttpException
の継承。コレの継承クラスなら,handleメソドを実装せずとも、
responseメソドでreturn ResponseするだけでOKみたい。