fuelphpのエラーハンドリング

1,667 views
Skip to first unread message

mkkn.info(みかかね)

unread,
Jul 29, 2013, 5:21:40 AM7/29/13
to fuelp...@googlegroups.com
ちょうど似たような内容のスレッドも立っていますが、、、、

本番環境でのエラーハンドリングってみなさんどうしていますか?
404のハンドリングはthrow new HttpNotFoundExceptionでrout.phpの_404_がコールされますが、
それ以外の例外についてはサポート無し、ですよね?

なんかドキュメントを見るとindex.phpを触ってください、みたいな感じの記述が有るんですが,
それも気持ち悪いですし…

そもそも本番でエラーとかダメでしょ、って話は分かるんですが、
それでも実際にはそういう場面も起こってしまいますし,その時に真っ白、よりかは
「メンテナンス中」みたいなページに遷移さたいとか考えてます。

ちょうどCIで言う所のshow_error関数みたいなものが欲しいなぁと

とりあえず思いついたのは
- Requestクラスのexecuteを上書きして内部でcatchする
- Controllerとかfunctions.php(用意)にshow_error相当の関数/メソドを用意しaction内でcatchしてshow_error呼び出し
みたいな感じなんですが、実際に運用しててこんなのが便利だったよーみたいな話があったら聞いてみたいとか考えています。

池崎 真太郎

unread,
Jul 29, 2013, 5:40:33 AM7/29/13
to fuelp...@googlegroups.com
みかかねさん

池崎@hackohです。

Production時のエラー画面を制御したいのでしたら、
app/views/errors/production.php
に、オリジナルのviewを配置できます。

例えば、HTTPステータスコード毎に変更したい、等、
汎用的なモノをお望みでしたら、
自前で特別な機構を用意する必要があるのではないでしょうか。

池崎 真太郎

unread,
Jul 29, 2013, 6:16:03 AM7/29/13
to fuelp...@googlegroups.com
池崎@hackohです。

補足です。

HttpServerErrorException

という例外もあり、これをスローすると、

app/views/500.php

が読み込まれます。
( 未設置時は core/views/500.php )

mkkn.info(みかかね)

unread,
Jul 29, 2013, 6:32:42 AM7/29/13
to fuelp...@googlegroups.com
返信ありがとうございます!!

そのような機能が会ったとは…全然知らなかったです。
非常に参考になりました!!

確かに調べてみるとRequest::forgeまわりでHttpNotFoundExceptionをcatchするのとは別のルートで、
Errorクラスというのがあって、そこからset_exception_handlerに登録されているのですね。

よくみてみると例外クラスにhandleメソドというのを実装してやれば、
例外クラスごとにcatchサれなかった場合の挙動を実装出来るみたいで、、、
fuelphp奥が深いですね…


2013年7月29日月曜日 19時16分03秒 UTC+9 Ikezaki Shintaro:

Takayuki Yamaguchi

unread,
Jul 29, 2013, 8:25:49 PM7/29/13
to fuelp...@googlegroups.com
CSRFのautoloadによるエラーのcatchはindex.phpでやってね、ってドキュメントに書いてあるので、Exceptionのcatchはpublic/index.phpが良いのかなぁと思ってます。

http://fuelphp.com/docs/classes/security.html

If you want to deal with CSRF validation failures when autoload is enabled, you can catch the SecurityException in your index.php.

mkkn.info(みかかね)

unread,
Aug 5, 2013, 8:42:01 AM8/5/13
to fuelp...@googlegroups.com
文言的には you can .catch .. ですよね。ニュアンス的には、「できるよ。」程度な感じでしょうか?

単純にcan catchレベルの話で行くと Request::execute内でもできたりとか、
そもそもcatchしなくてもErrorクラス上手いことやればハンドリングできる、みたいな感じですよね

いろいろ出来すぎる状態だし,ドキュメント的にもなんかしらの提示が有るわけでも無いので、
もうエラーハンドリングは好きにしてくれ、的な状態なんでしょうか。


2013年7月30日火曜日 9時25分49秒 UTC+9 Takayuki Yamaguchi:
Reply all
Reply to author
Forward
0 new messages