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());



プラグインで、ログイン状態判定もできそうだなと思っています。

コメント 停止中

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