エラー処理ポリシー
アプリケーションの実行中に生じるエラーは、次の2つにわけられます。
- System error
- システムが原因で起きるエラー。DBエラーなど。
- User error
- ユーザがフォームに入力した値が不正である場合のエラー。
Ethnaフレームワークでは、これらのエラーは全てEthna_Error(またはPEAR_Error)によって処理されます。
Ethna_Error
Ethna_Errorには、エラーコードとエラーメッセージが格納されています。 Ethna_Errorはシステムとしてエラーハンドリングを行うので,実際のアプリケーションでは,Ethna_Errorをアクションクラスで処理し,ユーザに必要な情報のみを提示します.
function perform() { $sm =& new {アプリケーションID}_SampleManager(); $result = $sm->test(); if (Ethna::isError($result)) { //エラーの場合の処理 ..... } .... }
EthnaクラスのisError()メソッドで、エラーの有無を確認できます。 ここではtest()メソッドからエラーオブジェクトが返ってきた場合に,エラー処理を行うようにしています。
アプリケーションのManagerでエラーオブジェクトを返すには、次のようにします。
class {アプリケーションID}_SampleManager { function test($data) { // 実際には,まともなエラー処理を行う. if (! $data) { return Ethna::raiseNotice('データがありません', E_SAMPLE_TEST); } return 0; } }
エラーオブジェクトには、Notice,Warning,Errorの3つがあります。 エラーの内容に応じて,これらを使い分けます. アプリケーション固有のエラーメッセージを渡したい場合は、EthnaクラスのraiseNotice,raiseWarning,raiseErrorメソッドを使って,Ethna_Errorオブジェクトを生成します. この例では,raiseNoticeを用いてエラーオブジェクトを返しています. 引数には,メッセージとエラーコードを与えます.
ActionError
エラーの内容をユーザに提示した場合,アクションクラスで受け取ったエラーオブジェクトをActionErrorに格納します。 具体的には、下記のようにae(actionError)のaddObjectメソッドを使います。
if (Ethna::isError($result)) { $this->ae->addObject('testError', $result); }
また、エラーメッセージとエラーコードから、エラーオブジェクトを生成して、ActionErrorに追加するaddメソッドもあります。
ActionErrorの内容を表示するには,ビューで次のように書きます.
<tr> <td>エラーメッセージ</td> <td>{message name="testError"}</td> </tr>