IsZend Db Adapter зарегистрирован в реестре при использовании ресурса по умолчанию? - PullRequest
0 голосов
/ 15 марта 2010

В Zend Framework есть готовые ресурсы, когда настраивается в INI-файле

resource.db.user ="xxxx"...

bootstrap устанавливает адаптер db, просто любопытно, загрузчик также устанавливает db адаптер в реестр или нет?

Ответы [ 3 ]

1 голос
/ 15 марта 2010

Из Руководства ZF по Zend Application :

Реестр ресурсов

Многие, если не все, ваши методы ресурсов или плагины будут инициализировать объекты, и во многих случаях эти объекты будут необходимы в других местах вашего приложения. Как вы можете получить к ним доступ?

Zend_Application_Bootstrap_BootstrapAbstract предоставляет локальный реестр для этих объектов. Чтобы хранить в них ваши объекты, вы просто возвращаете их из своих ресурсов.

Для максимальной гибкости этот реестр внутренне называется «контейнером»; его единственные требования - это то, что это объект. Затем ресурсы регистрируются как свойства, названные в честь имени ресурса. По умолчанию используется экземпляр Zend_Registry, но вы также можете указать любой другой объект, который пожелаете.

Обратите внимание, что они также заявляют:

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

Я проверил с исходным кодом для Zend_Application_Bootstrap_BootstrapAbstract, и контейнер действительно является новым экземпляром Zend_Registry. Как указано в руководстве, это локальный реестр, и он не устанавливается через setInstance() как глобальный экземпляр. Так что если вы ссылаетесь на глобальный Zend_Registry, который вы получаете с getInstance(), то ответ - нет. Адаптер БД там не будет.

Примечание: Я не совсем уверен, что адаптер db даже хранится в локальном объекте реестра, так как я не смог найти никаких ссылок на плагины, которые там помещаются. registerPluginResource(), кажется, помещает ресурс в массив. Не имеет значения для вашего вопроса, хотя. Ответ до сих пор нет.

1 голос
/ 15 марта 2010

Вы можете добавить его в реестр самостоятельно в своем классе Bootstrap:

protected function _initAddDbToRegistry()
{
    $this->bootstrap('db');
    $db = $this->getResource('db');

    Zend_Registry::set('db', $db);
}

Однако, если вы просто хотите получить у Db-адаптер, есть несколько вариантов:

Во-первых, Zend_Application_Resource_Db установит адаптер db в качестве значения по умолчанию для Zend_Db_Table, поэтому вы можете получить его в любом месте вашего приложения, используя:

$db = Zend_Db_Table::getDefaultAdapter();

Кроме того, вы можете получить его через передний контроллер. Внутри действия контроллера вы можете использовать:

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

или во всем приложении, это будет работать:

$bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');
db = $bootstrap->->getResource('db');
1 голос
/ 15 марта 2010

Насколько я знаю, в Zend_Registry ничего не добавлено по умолчанию. Вы должны сделать это самостоятельно одним из ваших методов Bootstraps _init ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...