Чтобы ответить на вопрос 3, ZF использует плагин ресурсов приложения Zend_Application_Resource_Db
для загрузки конфигурации и создания экземпляра адаптера базы данных.
Если ваша потребность в нескольких базах данных связана с окружающей средой, вы можете легко указать пространство имен вашей БД в файле application.ini.
[production]
resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = user
resources.db.params.password = pass
resources.db.params.dbname = production_db
[staging : production]
resources.db.params.dbname = staging_db
[development : production]
resources.db.params.dbname = development_db
В этом примере мы настраиваем общую информацию в разделе [production]
и переопределяем ее для наших сред разработки и разработки. Какая конфигурация применяется, определяется переменной окружения в .htaccess
вашего приложения
Если вам нужен доступ к нескольким базам данных в одном приложении, я бы порекомендовал создать собственный плагин Application Resource Plugin и создать некую структуру для хранения нескольких соединений.
Это не так сложно, как может показаться. Читайте об этом здесь и создайте подкласс из Zend_Application_Resource_ResourceAbstract
. Используя этот класс, вы можете легко получить resources.*
в вашем конфигурационном файле, используя:
$this->getBootstrap()-getResource('mydb')`
После этого у вас будет доступ к вашему плагину через объект начальной загрузки:
$bootstrap->getPluginResource('mydb')
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: я забыл упомянуть, если у вас есть плагин ресурсов как часть вашего application.ini, загрузчик Zend_Application автоматически узнает, как включить его как часть процесса начальной загрузки, так что вам не нужно определять _init()
метод в вашем файле начальной загрузки. Это что-то вроде магии.
Кроме того, что касается хранения экземпляра адаптера, я бы, вероятно, просто использовал Zend_Registry.