忘れないうちにメモメモ。
Zend Frameworkはモジュール別Bootstrap.phpを用意して利用すると、どのモジュールですべてのBootstrapクラスにある_initXX()メソッドが実行されてしまいます。
モジュールの設定
$ vim application.ini
--------------------------------
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] =
fooモジュールとbarモジュールがあった場合は
$ vim modules/foo/Bootstrap.php↑↑どこのモジュールからでも両方のメソッドが実行されてしまう。
--------------------------------
class Foo_Bootstrap extends Zend_Application_Module_Bootstrap {
protected function _initFoo() {
// 何らかの前処理
}
}
$ vim modules/bar/Bootstrap.php
---------------------------------
class Bar_Bootstrap extends Zend_Application_Module_Bootstrap {
protected function _initBar() {
// 何らかの処理
}
}
なんかモジュール毎にBootstrap置く意味がないですね。というかこれだったら
application/Bootstra.php内にすべて処理を済ませてしまえば良いのです。
なのでモジュールごとにBootstrapを実行させる方法をめも。
※ココを参考にしました。Phly, boy, phly
要は各Bootstrap内で、プラグインを登録しそこで処理を実行させちゃいなよ、YOU。ということです。
$ vim modules/foo/Bootstrap.php
--------------------------------
class Foo_Bootstrap extends Zend_Application_Module_Bootstrap {
protected function _initFoo() {
$this->bootstrap("FrontController");
$front = $this->getResource("FrontController");
$front->registerPlugin(new My_Plugin_Foo()); // ここでプラグイン登録
}
}
次にプラグインを作成します。
$ vim My/Plugin/Foo.phpこれでOKです。
--------------------------------
class My_Plugin_Foo extends Zend_Controller_Plugin_Abstract {
/**
* @Override
*/
public function dispatchLoopStartup(Zend_Controller_Requset_Abstract $req) {
if ($req->getModuleName() != "foo") { // ちょっとアナログな感じ、、
return;
}
// ここに処理
}
}
barモジュールも同様にすれば良いです。
また処理ごとにMy_Plugin_Foo_XXとか My_Plugin_Foo_YYとかクラスを分けた方が分かりやすいと思います。
ただ、注意するのはモジュール内のBootstrapでプラグインを登録する方法だと、
実際に処理が実行されるタイミングがルータが動作した後だったりするので、完全な意味での「前処理」が出来ない場合もあるので注意しましょう。
では、次回はもう1つの方法をメモしときまぁぁす。
0 件のコメント:
コメントを投稿