Zend соединение с базой данных - PullRequest
1 голос
/ 13 февраля 2012

В одном из наших проектов соединение с базой данных, указанное в 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

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

Ответы [ 3 ]

2 голосов
/ 13 февраля 2012

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

1 голос
/ 13 февраля 2012

Обычно соединение с БД устанавливается в 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 из своего пользовательского файла.

0 голосов
/ 13 февраля 2012

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

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

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

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

$dbConfig = $db->getConfig();

или даже: -

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

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

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

...