【Zend】処理中にbootstrapを取得する方法

controllerの中なら、

1
$bootstrap = $this->getInvokeArg('bootstrap');


で取得できる。

modelとかの中でも

1
$bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');


で取得できる


bootstrap取得して何をするかというと、application.iniで設定したリソースを取得できる。
例えば、multidbリソースを使ってたとすると

1
$bootstrap->getPluginResource('multidb')->getDb('hoge1');



みたいに、hoge1 DBへのDBアダプターが取得できる。

このアダプターを、各テーブルクラスのコンストラクタで、テーブルのアダプターとして設定してあげると、普段Default_Adapterを設定しているときのように、どのアダプタを使うとかを、プログラムを作るときに意識しなくていい。


== その後1 ==
生成されたPluginリソース(Zend/Application/Resourceとかにあるやつ)は、
BootstrapのContainer(中身はZend_Registryインスタンス)に入ってたので。

1
$boostrap->getContainer()->multidb->getDb('hoge1');


でも同様のDBアダプターが取得できる。

getPluginResource()だと、インスタンスがなかった場合作ってくれるが、
Container経由だと、なかったらnullが返ってくるはず。

どっちもpublicメソッドなので、どちらでも使える。
処理数でいうと、getContainerが少ない(チェックとかないため)ので、
最初からインスタンスがあるってわかってるものについては、getContainer()経由がいいのかも。

== その後2 ==
ソース見ても、getPluginResource()は、bootstrapの中からしか呼ばれてないし、
protectedでいいと思うんだけど、なんでだろう?

自前のBootstrap作るときも、Bootstrapクラス継承するから問題ないし。
クラス外から呼ばれることを想定していたとして、どういう場合かがわからん。

getContainer()一本でいいのに。

  • 【Zend】処理中にbootstrapを取得する方法 はコメントを受け付けていません。
コメントは閉じられています。

return top

%d人のブロガーが「いいね」をつけました。