2012-02-13 5 views
1

В одном из нашего проекта подключения к базе данных, указанное в application.ini являетсяЗенда

resources.db.adapter = Mysqli 
resources.db.params.host = localhost 
resources.db.params.username = root 
resources.db.params.password = '' 
resources.db.params.dbname = zf_tutorial 

Но я должен называть хост, имя пользователя, пароль и DBName из другого файла. как это сделать?

+0

Что значит «из другого файла»? – Songo

ответ

0

Принятый ответ здесь не является хорошим способом получить объект db, он должен быть установлен в application.ini, как вы делали изначально.

Если вы хотите получить еще один экземпляр объекта db, у вас есть несколько вариантов; вы можете сделать, как следует @RockyFord, или вы можете получить объект БД из любого контроллера, как это: -

$db = $this->getInvokeArg('bootstrap')->getResource('db'); 

Если вы хотите пойти дальше и иметь доступ к connection details (я не могу себе представить, почему бы нужно их снова), то вы можете получить их от объекта БД, как это: -

$dbConfig = $db->getConfig(); 

или действительно: -

$dbConfig = $this->getInvokeArg('bootstrap')->getResource('db')->getConfig(); 

Который даст вам массив, содержащий данные соединения, вы можете попробовать это и сделать var_dump($dbConfig);, чтобы увидеть подробности.

Это гораздо более надежный способ доступа к объекту db, если вам нужно, хотя я бы очень долго смотрел на ваш общий дизайн кода, если вам нужно сделать это в нескольких местах, особенно если вы доступ к деталям соединения, как описано здесь.

+0

HI vascowhite, Мое требование состоит в том, что у нас есть проект с открытым кодом, закодированный в обычном php4. теперь мы планируем обновить этот проект с помощью zend framework. Поэтому в настоящее время мы не можем обновить это как целое. поэтому планируйте обновление шаг за шагом. Поэтому изначально мы должны использовать существующее соединение проекта db. Но это db-соединение является динамическим. этот проект далее подразделяется на субдомен, поэтому на основе субдомена база данных будет изменяться (пользователь и пароль останутся такими же). Поэтому каждый поддомен изменяет db. – Pradeep

0

Обычно подключение к БД устанавливает в index.php:

// TODO: $adapter and $params from custom place, not hardcoded 
$adapter = 'pdo_mysql'; 
$params = array(
    'host' => 'localhost', 
    'username' => 'root', 
    'password' => '', 
    'dbname' => 'mydb' 
); 
$db = Zend_Db::factory($adapter, $params); 
Zend_Db_Table_Abstract::setDefaultAdapter($db); 

В этом коде $ адаптера и $ PARAMS являются жёстко. Вы можете получить $ adapter и $ params из своего настраиваемого файла.

2

обычно с вашей установкой базы данных в application.ini вызывающего адаптера по умолчанию является тривиальным
$db = Zend_Db_Table::getDefaultAdapter();
добавления resources.db.isDefaultTableAdapter = true к application.ini убеждается вы вызываете правильный адаптер.
Бывают ситуации, когда это может не работать должным образом, и большинство из них связано с загрузкой.