Zend Framework中有一个开箱即用的资源, 何时在ini文件中配置
resource.db.user ="xxxx"...
引导程序设置db适配器,只是好奇引导程序是否也将db adapter设置为注册表,或者不是?
答案 0 :(得分:1)
据我所知,默认情况下没有任何内容放入Zend_Registry。你必须自己在一个Bootstraps _init ...方法中做到这一点。
答案 1 :(得分:1)
来自ZF Manual on Zend Application:
资源注册表
许多(如果不是全部)资源方法或插件将初始化对象,并且在许多情况下,应用程序中的其他位置将需要这些对象。你怎么能访问它们?
Zend_Application_Bootstrap_BootstrapAbstract
为这些对象提供本地注册表。要将对象存储在其中,只需从资源中返回它们即可。为了获得最大的灵活性,此注册表在内部称为“容器”;它唯一的要求是它是一个对象。然后将资源注册为以资源名称命名的属性。默认情况下,使用
Zend_Registry
的实例,但您也可以指定任何其他对象。
请注意,他们还声明:
请注意,注册表和容器不是全局的。这意味着您需要访问引导程序才能获取资源。
我已经使用sourcecode for Zend_Application_Bootstrap_BootstrapAbstract
进行了检查,容器确实是一个新的Zend_Registry实例。就像他们在手册中说的那样,这是一个本地注册表,而不是通过setInstance()
设置为全局实例。因此,如果您使用Zend_Registry
引用全局getInstance()
,那么答案就是否定。数据库适配器不在那里。
注意:我不完全确定,db适配器甚至存储在本地注册表对象中,因为我找不到任何插件放在那里的插件。 registerPluginResource()
似乎将资源放在一个数组中。但是对你的问题无关紧要。答案仍然没有。
答案 2 :(得分:1)
您可以在Bootstrap类中自行将其添加到注册表中:
protected function _initAddDbToRegistry()
{
$this->bootstrap('db');
$db = $this->getResource('db');
Zend_Registry::set('db', $db);
}
但是,如果你只想获得Db适配器,那么有很多选择:
首先,Zend_Application_Resource_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');