Предполагая, что вы внимательно относитесь к соглашениям ZendApplication , где вы должны настраивать обработчик базы данных для разработчиков приложений для доступа?
Я знаю, как настроить адаптер ZendDb . Я хочу знать, что в контексте Zend Framework разработчики должны создавать экземпляры своих обработчиков БД, поэтому им не нужно беспокоиться о нескольких экземплярах в одном запросе, каждый раз предоставляя учетные данные и т. Д.
Например, когда разработчик использует Code Igniter и ему нужно выполнить произвольный запрос, на контроллере есть обработчик базы данных.
$this->db->query(....
Каков эквивалент Zend этого соглашения? Чтобы быть ясным, я могу придумать полдюжины способов выполнить это, используя инструменты, которые предоставляет Zend Framework. Я ищу, как Zend Framework в общем случае хочет, чтобы вы это сделали.
Идея заключается в том, что ваш Bootstrap читает файл конфигурации и объявляет записи конфигурации для описания адаптера базы данных, который вы хотите создать:
[bootstrap] resources.db.adapter = Pdo_Mysql resources.db.params.dbname = "mydatabase" resources.db.params.username = "webuser" resources.db.params.password = "XXXX" resources.db.isDefaultTableAdapter = true
Если вы используете ключи конфигурации, соответствующие правильному соглашению, это автоматически сигнализирует базовому классу Bootstrap для создания и инициализации объекта Zend_Application_Resource_Db
и сохраняет его в реестре ресурсов начальной загрузки .
Позже в вашем контроллере вы можете получить доступ к реестру ресурсов. примечание: я отредактировал этот код после тестирования его немного больше.
class SomeController extends Zend_Controller_Action { public function init() { $bootstrap = $this->getInvokeArg("bootstrap"); if ($bootstrap->hasPluginResource("db")) { $dbResource = $bootstrap->getPluginResource("db"); $db = $dbResource->getDbAdapter(); } } }
Кроме того, вы можете написать собственный метод инициализации в вашем классе Bootstrap, чтобы сохранить объект в Zend_Registry по умолчанию:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initDb() { if ($this->hasPluginResource("db")) { $dbResource = $this->getPluginResource("db"); $db = $dbResource->getDbAdapter(); Zend_Registry::set("db", $db); } } }
Теперь вы можете получить доступ к своему объекту db за один шаг вместо трех:
class SomeController extends Zend_Controller_Action { public function init() { $db = Zend_Registry::get("db"); } }
Лично я бы использовал второй метод, потому что тогда мне нужно получить доступ к реестру ресурсов только один раз, в моем бутстрапе. В первом примере мне пришлось бы скопировать тот же блок кода ко всем моим контроллерам.