Dbハンドラの生成をmodelクラスで行っていたのですが、
複数のモデルクラスを使う処理の場合もあるので、どこか1か所に
生成処理をまとめられないかなと思って、たどりついたのがプラグインでした。
ソースは、以下
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);
}
}
こうやっておけば、どこのクラスでも
Zend_Loader::loadClass('Zend_Db_Table_Abstract');
$db = Zend_Db_Table_Abstract::getDefaultAdapter();
とすると、Dbアダプターが取得できます。
Dbアダプターを作成するモデルクラスを基底クラスとして、作っていたのですが、
こちらの方が全然いいなと思いました。
プラグインを有効にするには、フロントコントローラに登録する必要があります。
index.phpで以下の行が必要です。
require_once('Custom/Controller/Plugin/DbAdapter.php');
$front = Zend_Controller_Front::getInstance();
$front->registorPlugin(new Zend_Controller_Plugin_DbAdapter());
プラグインで、ログイン状態判定もできそうだなと思っています。