DBアダプタ作成処理をプラグインにて行う
Dbハンドラの生成をmodelクラスで行っていたのですが、
複数のモデルクラスを使う処理の場合もあるので、どこか1か所に
生成処理をまとめられないかなと思って、たどりついたのがプラグインでした。
ソースは、以下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Zend_Loader::loadClass('Zend_Controller_Plugin_Abstract'); Zend_Loader::loadClass('Zend_Db'); Zend_Loader::loadClass('Zend_Db_Table_Abstract'); Zend_Loader::loadClass('Zend_Config_Ini'); class Zend_Controller_Plugin_DbAdapter extends Zend_Controller_Plugin_Abstract { public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) { // DBアダプタ生成 $config = new Zend_Config_Ini('config/system.ini', 'default'); $db = Zend_Db::factory($config->database->adapter, $config->database->params->toArray()); $db->setFetchMode(Zend_Db::FETCH_ASSOC); // Db Tableクラス利用DBアダプタ設定 Zend_Db_Table_Abstract::setDefaultAdapter($db); } } |
こうやっておけば、どこのクラスでも
1 2 3 | Zend_Loader::loadClass('Zend_Db_Table_Abstract'); $db = Zend_Db_Table_Abstract::getDefaultAdapter(); |
とすると、Dbアダプターが取得できます。
Dbアダプターを作成するモデルクラスを基底クラスとして、作っていたのですが、
こちらの方が全然いいなと思いました。
プラグインを有効にするには、フロントコントローラに登録する必要があります。
index.phpで以下の行が必要です。
1 2 3 4 | require_once('Custom/Controller/Plugin/DbAdapter.php'); $front = Zend_Controller_Front::getInstance(); $front->registorPlugin(new Zend_Controller_Plugin_DbAdapter()); |
プラグインで、ログイン状態判定もできそうだなと思っています。