ZendFramework入門・その4 フォームを取り扱う・その2
2007-09-10


未実装のアクションを呼び出す

さて、今回は例外処理からはじめたいと思います。とはいってもそう難しいことをやるわけではなく、Zend_Controllerが標準的に用意している仕組みの導入方法を説明するだけですが。

まずは例外を発生させるところからはじめましょう。やりかたは至極簡単、前回作成した「zf2」アプリケーションで、存在しないアクションを呼び出すだけです。 前回までの実装では、IndexControllerに実装したアクションメソッドは「index」アクションと「dump」アクションの2つのみでした。この実装状況のままで、存在しないアクションメソッド、そうたとえば「hoge」を呼び出してみましょう。

http://<host名>/zf2/index/hoge/ へアクセスしてみてください。いきなり「Fatal error」が表示されるはずです(表示されない場合はdisplay_errorsがfalseになっていると思われるので、PHP.iniを見直すか、index.phpでini_setを行うようにしてください)。

エラーハンドラを作成する

次にこの例外をキャッチして、エラーの内容を表示するようにしてみます。やり方は簡単、専用のアクションコントローラ「ErrorController」にアクションメソッド「errorAction()」を実装し、対応するビュースクリプト「error.phtml」をviews/scripts/error/に設置するだけです。

まずはErrorControllerを作成しましょう。内容は以下のように、結構シンプルなものになります。

<?php
require_once 'Zend/Controller/Action.php';

class ErrorController extends Zend_Controller_Action {
        public function errorAction() {
                // レスポンスオブジェクトから取得した
                // 例外情報をビューへassignする
                $this->view->assign(
                        'errors',
                        $this->getResponse()->getException()
                );
        }
}
ErrorController.php
「$this->getResponse()」はレスポンスオブジェクト「Zend_Controller_Response_Abstract」を取得するメソッドです。Zend_Controllerを使用している場合、処理中に発生したエラーはレスポンスオブジェクトに格納されるため、レスポンスオブジェクトを取得し、そのあとにgetException()メソッドで例外を取得します。そしてそれをビューへassignしています。

エラーの内容を表示する

このエラーアクションを表示するerror.phtmlは以下のようにしてみましょう。

<html>
  <head>
        <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
        <base href="<?php echo $this->baseUrl; ?>/"></base>
        <title>フォーム テスト - エラー</title>
  </head>
  <body>
        <h3>以下のエラーが発生しました</h3>
        <ul>
        <?php
        foreach($this->errors as $error) {
                echo '<li>' . $error->getMessage() . '</li>';
        }
        ?>
        </ul>
  </body>
</html>
error.phtml
errorAction内でassignされた「errros」を処理しているのですが、Zend_Controller_Response::getException()が例外の配列を返すためforeachで処理しています。配列の内容は例外クラス「Exception」およびその派生の例外クラスですので、getMessage()メソッドでエラーメッセージを取得することができます。Exceptionの詳細はPHPのマニュアルの「第20章 例外(exceptions)」を参照してください。

エラー処理を追加したフォルダツリー

ここまででフォルダツリーは以下のようになります。


続きを読む

[PHP]
[Zend Framework]
[Zend Framework 入門]

コメント(全2件)
コメントをする


記事を書く
powered by ASAHIネット