protected function _initDatabase()
{
$params = array(
'Host' => '',
'username' => '',
'password' => '',
'dbname' => '',
);
$database = Zend_Db::factory('PDO_MYSQL', $params);
$database->getConnection();
return $database;
}
。
class App_Controller_Plugin_Test extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Http $request)
{
// how i get database?
}
}
フロントコントローラーへの参照はいつでも取得できます。
$front = Zend_Controller_Front::getInstance();
それから、ブートストラップを取得できます。
$bootstrap = $front->getParam("bootstrap");
bootstrapからbootstrapプラグインを取得できます:
if ($bootstrap->hasPluginResource("database")) {
$dbResource = $bootstrap->getPluginResource("database");
}
$db = $dbResource->getDatabase();
しかし、それは余分な配管がたくさんあります!
正直なところ、ブートストラップ中にデータベースアダプタオブジェクトをレジストリに保存することをお勧めします。
protected function _initDatabase()
{
$params = array(
'Host' => '',
'username' => '',
'password' => '',
'dbname' => '',
);
$database = Zend_Db::factory('PDO_MYSQL', $params);
$database->getConnection();
Zend_Registry::set("database", $database);
return $database;
}
次に、データベースアダプタをどこからでも入手できます。
Zend_Registry::get("database");
Zendアプリケーションにデータベースハンドラーを提供する「正しい」方法は何ですか に対する私の答えも参照してください。
残念ながら、プラグインには_Zend_Controller_Action
_のgetInvokeArg("bootstrap")
のようなものはありません。フロントコントローラーを介して常にbootstrap参照を取得できます:
_$db = Zend_Controller_Front::getInstance()->getParam("bootstrap")->getResource("database");
_
しかし、私が通常することは
_Zend_Registry::set('database', $database);
_
次に、プラグインで:
_try
{
$db = Zend_Registry::get('database');
}
catch (Zend_Exception $e)
{
// do stuff
}
_
より簡単で、データベースはアプリケーションのほぼどこからでも取得できます。
[これを別のマシンで動作しているコードと照合する必要があります。こんな感じだと思います…]
$db = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('db');
$ db = Zend_Db_Table :: getDefaultAdapter();