Он должен работать без явного определения Zend_Db_Table::setDefaultAdapter()
. Возможно, вам не хватает только $this->bootstrap('db')
, который создает экземпляр вашего ресурса db
.
Вот код, который я имею в моем application.ini
resources.db.adapter = "Pdo_Mysql"
resources.db.params.host = "dbhost"
resources.db.params.username = "username"
resources.db.params.password = "pass"
resources.db.params.dbname = "dbname"
resources.db.params.charset = "utf8"
resources.db.isDefaultTableAdapter = true
resources.db.profiler.enabled = true
resources.db.profiler.class = Zend_Db_Profiler_Firebug
Вот код, который у меня есть в моей начальной загрузке
protected function _initDbAdapter()
{
$this->bootstrap('db');
$db = $this->getPluginResource('db');
// force UTF-8 connection
$stmt = new Zend_Db_Statement_Pdo(
$db->getDbAdapter(),
"SET NAMES 'utf8'"
);
$stmt->execute();
$dbAdapter = $db->getDbAdapter();
// Query profiler (if enabled and not in production)
$options = $db->getOptions();
if ($options['profiler']['enabled'] == true
&& APPLICATION_ENV != 'production'
) {
$profilerClass = $options['profiler']['class'];
$profiler = new $profilerClass('All DB Queries');
$profiler->setEnabled(true);
$dbAdapter->setProfiler($profiler);
}
Zend_Registry::set('db', $dbAdapter);
}
UPDATE
Ответ был найден в комментариях, вот результат:
Методы _init + standard resource name
(то есть: db, log, session) автоматически запускаются в вашей начальной загрузке, изменяя имя вашего метода _init, который инициализирует вашу базу данных на что-то другое, чем _initDb
, должно сработать. В противном случае, если вы попытаетесь сделать $this->bootstrap(*resource name*)
, вы получите круговую зависимость.