Nullyのぶろぐ

仙台で働くエンジニアの日記

Module毎にErrorHandlerを定義する(改訂版)

以前投稿した「[ZendFramework]モジュール毎にErrorHandlingを行う」という記事で投稿した内容はどうやら動かないようでしたので、改訂版として訂正させていただきます。

今までに上記記事をご覧になり作成してしまった皆様へお詫び申し上げます。

申し訳ありませんでした。

今回のModule毎にErrorHandlerの定義は、Pluginとなるものを自作し、そのPluginをFrontControllerに登録して上げることでModule別に振り分けるようにしています。

はじめに

今回利用している2010年2月1日現在の最新版である「1.10」を利用して作成しています。

今後のバージョンアップによって変動する場合がありますのでご注意ください!

下準備

まず、以下のようなクラスファイルを作成します。

// App/Controller/Plugin/ErrorHandlerPlugin.php

class App_Controller_Plugin_ErrorHandlerPlugin extends Zend_Controller_Plugin_Abstract

{

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $rquest) {

$plugin = Zend_Controller_Front::getInstance()->getPlugin("Zend_Controller_Plugin_ErrorHandler");

$plugin->setErrorHandlerModule($request->getModuleName());

}

}

実際に登録する

作成したら、APPLICATION_PATH/Bootstrap.phpの_initメソッドに追加してあげます。

#:

#:(中略)

#:

protected function _initControllerPlugins()

{

$this->bootstrap("frontController");

$front = $this->getResource("frontController");

$front->registerPlugin(newApp_Controller_Plugin_ErrorHandlerPlugin());

}

これでモジュール単位のErrorHndlerが行えるようになります。

また、Module別でレイアウトを使っていて、レイアウトも変更したい場合は、「dispatchLoopStartup」内で、

Zend_Layout::getMvcInstance()->setLayoutPath($layoutPath);

のように指定してあげることでモジュール別のレイアウトを利用し、モジュール別のErrorHandllingが行えるようになると思います。(試していないので未確認です...)

最後に

以前投稿した記事については本当に申し訳ありませんでした。

もっともっとZend Frameworkを熟知しなければならないと実感しました...。

まだまだ勉強不足で探り探りやっていますが、間違いや動かない!などがあれば@Nullyにでもお知らせいただければと思います。

また、今回のErrorHandlerの定義に関しては、Moduleを利用している場合でしか確認しておりませんので、単体で利用する場合などは利用方法が多少異なる場合も有りますので、予めご了承ください。