ZendFrameworkで例外処理

ZendFrameworkは、アクセスするアドレスに指定したモジュールやアクション名が間違っていたりすると、例外を発生し、画面にはエラーメッセージがずらりと出力されます。これは余り見栄えのいいものではありません。

ZendFrameworkでは、特定のコントローラで受け取れなかった例外は、フレームワークにより例外処理専用のコントローラに送られます。この例外処理専用のコントローラは『ErrorController』というものです。それでは、このクラスを作成してみましょう。

ErrorControllerの作成

『controllers』フォルダ内に『ErrorController.php』というファイルを作成して、下記のように記述します。

<?php
require_once 'Zend/Controller/Action.php';
class ErrorController extends Zend_Controller_Action{

 public function indexAction(){}

 public function errorAction(){
 try{
 //レイアウトをオフにします
 $this->_helper->layout->disableLayout();
 }catch(Exception $e){}
 $msg="<h4>※問題が発生しました。[errorAction]</h4>";
 $msg.=$this->getErrorMessage();
 $this->view->assign('errors',$msg);
 }

 public function __call($action,$arg){
 try{
 //レイアウトをオフにします
 $this->_helper->layout->disableLayout();
 }catch(Exception $e){}
 $msg="<h4>※問題が発生しました。[__call]</4>";
 $msg.=$this->getErrorMessage();
 $this->view->assign('errors',$msg);
 }
 //エラー内容のとりまとめ
 function getErrorMessage(){
 //getExceptionの例外オブジェクトを代入する
 $ex=$this->getResponse()->getException();
 $msg="";
 //受け取った例外オブジェクトを1つずつ取り出す
 foreach($ex as $error){
 $msg.="<div>".$error->getMessage()."</div>";
 }
 return $msg;
 }
}

エラー表示用のビューの作成

次に例外発生時に表示されるビューを用意します。『views/scritps』フォルダ内に『error』フォルダを作成します。作成した『error』フォルダ内に『error.phtml』ファイルを作成して、下記のように記述します。

<!DOCTYPE HTML>
 <html>
 <head>
 <meta charset="utf-8">
 <title>エラー</title>
 </head>
<body>
 <h3>エラー発生!! [test/error.phtml]</h3>
 <?=$this->errors ?>
 </body>
 </html>

例外の送信

例外を発生させるには、通常、Exceptionクラス(またはそのサブクラス)のインスタンスを作成し、trhowします。ZendFrameworkの場合、フレームワークにおける例外は、このExceptionを継承した『Zend_Exception』というクラス(またはそのサブクラス)として用意されています。

本日は以上です。

 

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

このページの先頭へ