EDIT:
В отношении первого комментария ОП ниже ...
Нет, я не могу подробно описать настройку модульного ресурса БД. То, что я предоставил, должно работать в теории, я верю. Если это не так, я не уверен, что нужно изменить в расширении Zend_Application_Resource_Db
, потому что, как я уже говорил, я не использую этот ресурс. У меня есть собственный настраиваемый ресурс, который позволяет создавать несколько БД и извлекать эти БД на основе уникальных имен соединений. Однако я могу уточнить это: -)
Итак, у меня есть класс MyLib_Db
, который расширяет Zend_Db
, он выглядит примерно так:
class MyLib_Db extends Zend_Db
{
protected $_instance = null;
protected $_connections = array();
/**
* Standard Zend Framework unified constructor
* @param null|array An array of options that will be passed to setOptions
*/
public function __construct($options = null)
{
}
/**
* Standard Zend Framework setOptions implementation
* @param array $options and array of options from config
* @return MyLib_Db
*/
public function setOptions(array $options)
{
}
/**
* Set the class instance
* @param MyLib_Db
* @return MyLib_Db
*/
public static function setInstance($instance)
{
}
/**
* Get/create the singleton instance
* @return MyLib_Db
*/
public static function getInstance()
{
}
/**
* Get a Zend_Db adapter Instance by unique name
* Searches self::$_connections for the $name param as an array key
* @param String $name unique connection name
* @return Zend_Db_Adpater_Abstract|null
*/
public function getConnection($connectionName)
{
}
/**
* Add a connection instance to the registry
* Adds/creates an Zend_Db_Adapter instance to the connection registry with
* the string key provided by $name. If $connection is an array|Zend_Config it
* should match the format used by Zend_Db::factory as it will be passed to this
* function. If $name is null then the database name will be used.
* @param Zend_Db_Adapter_Abstract|Zend_Config|array The connection to register
* @param string|null $name A unique name for the connection
* @return MyLib_Db
*/
public function addConnection(Zend_Db_Adapter_Abstract $connection, $name = null)
{
}
/**
* Remove/Destroy the specified connection from the registry
* @param string $name the connection name to remove
* @return MyLib_Db
*/
public function removeConnection($name)
{
}
}
Так что в основном мой ресурс приложения для БД создает и возвращает экземпляр предыдущего класса. Во время создания он создает любые адаптеры, которые я настроил в своей конфигурации, и регистрирует их в этом экземпляре класса с именем (он также ищет флаг по умолчанию для использования с Zend_Db_Table
, а также для выполнения некоторых других операций).
Тогда я либо использую MyLib_Db::getInstance()->getConnection($name);
или я получаю экземпляр MyLib_Db
из начальной загрузки и затем вызываю getConnection
.
Лично я предпочитаю делать это таким образом, потому что это не зависит от того, будет ли соединение иметь широкое приложение или привязано к конкретному модулю, что позволяет более гибко использовать его повторно. Тем не менее, я фактически использовал это только в нескольких проектах, потому что в большинстве моих проектов Zend я использовал Doctrine вместо Zend_Db
.
Надеюсь, это поможет: -)
На самом деле, я думаю, вам нужно указать это в разделе вашего модуля в конфигурации, например modules.terms.resources.db.*
. Это должно заставить его загружаться в модуль начальной загрузки. В качестве альтернативы вы можете вручную настроить его с _initDb
в вашем Terms_Bootstrap
.
Лично я использую специальный класс управления БД и помещаю его в свои ресурсы вместо этого - он обрабатывает установку одного или нескольких адаптеров. Затем предположим, что $db
является менеджером, полученным из массива ресурсов ...
$dbAdapter = $db->getConnection('terms');