目次

エラー処理ポリシー

エラー処理ポリシー

アプリケーションの実行中に生じるエラーは、次の2つにわけられます。

Ethnaフレームワークでは、これらのエラーは全てEthna_Error(またはPEAR_Error)によって処理されます。

Ethna_Error1.png

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

Ethna_ActionError.png

エラーの内容をユーザに提示した場合,アクションクラスで受け取ったエラーオブジェクトを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>