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