さて、今回は例外処理からはじめたいと思います。とはいってもそう難しいことをやるわけではなく、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() ); } }
このエラーアクションを表示する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>
ここまででフォルダツリーは以下のようになります。
セコメントをする