- summary リソースエラー
リソースでのエラー発生はBEARの例外で行います。またPEARエラーや外部ライブラリ(Zend/PEAR)で発生した例外をそのまま返す事もできます。
App/Roリソースでエラーはエラーが発生した瞬間に全ての処理を中断するエラーと、エラーが発生してもクライントにエラーコードやエラー情報を返し処理を続行するエラーがあります。ここでは前者をハードエラー、後者をソフトエラーと呼びます。
例えば認証を前提とするページで「認証リソース」が正常取得できない場合には即HTTP 503画面を出したい場合があるでしょう、続いて他のリソースを取得する必要がない場合です。これはハードエラーです。
一方、商品ページが商品リソースを取得した後に、「レコメンドエンジン」の不調により「その他おすすめ商品リソース」が取得できないとしましょう。ページを即時終了するほでではないエラーです。これはソフトエラーです。
基本的に下の2種類です。例外やアノテーション、専用メソッドを使ってエラーを発生させます。
* 400 Bad Request(呼び出し方に問題がある) * 500 Internal Resource Error(リソース内部でエラーが発生)
リクエストエラーのうち「引数に必須項目が無い」というエラーは`@required`アノテーションで簡単に実装できます。
BEAR_Ro::assert($bool, $msg)メソッドで入力項目のチェックができます。コード400のROが返されるのは同じです。
その他リソース内でリクエストエラーを発生させるには以下のようにします。
専用のリソース例外クラスを用意することができます。
例) App/Ro/Userの例外ファイルはApp/Ro/User/Exception.phpにBEAR_Exceptionを継承した例外クラスを作成します。
PEARエラーを返しても例外と同じように500のエラーが返ります。 PEAR::MD2やPEAR::HTTP_Clientを利用して、結果が正常かPEARエラーか調べなくてもそのまま返す事ができます。
Zendライブラリなど他のライブラリを利用して例外が発生しても500エラーとして返ります
HTTPのステータス画面を出力するときにはPanda_Exception例外をthrowします。HTTP画面を出力し処理を即終了します。リソースエラーと違いHTTPコードが全て利用できます。下記は404画面を出すサンプルです。
Panda_Exceptionはリソースに限らず何処でもthrowすることができます。