[英]Can I set a query timeout when using Zend_Db_Adapter_Pdo_Mssql?
[英]IsZend Db Adapter registered in Registry when using a default recource?
在ini文件中进行配置时,Zend Framework中有现成的资源
resource.db.user ="xxxx"...
引导程序设置数据库适配器,只是很好奇引导程序也将数据库适配器设置为注册表?
据我所知,默认情况下,Zend_Registry不会放入任何内容。 您必须自己使用Bootstraps _init ...方法之一来执行此操作。
从ZF Zend应用手册 :
资源注册表
许多(如果不是全部)资源方法或插件将初始化对象,并且在许多情况下,这些对象将在应用程序的其他位置被使用。 您如何访问它们?
Zend_Application_Bootstrap_BootstrapAbstract
为这些对象提供了本地注册表。 要将对象存储在其中,只需从资源中返回它们即可。为了获得最大的灵活性,此注册表在内部被称为“容器”。 它唯一的要求就是它是一个对象。 然后将资源注册为以资源名称命名的属性。 默认情况下,使用
Zend_Registry
的实例,但您也可以指定所需的任何其他对象。
请注意,它们还声明:
请注意,注册表以及容器不是全局的。 这意味着您需要访问引导程序才能获取资源。
我已经检查了Zend_Application_Bootstrap_BootstrapAbstract
的源代码,并且该容器确实是一个新的Zend_Registry实例。 就像它们在手册中指出的那样,这是一个本地注册表,而不是通过setInstance()
设置为全局实例。 因此,如果您引用的是通过getInstance()
获得的全局Zend_Registry
,那么答案是否定的。 数据库适配器将不在其中。
注意: 我不确定,数据库适配器甚至存储在本地注册表对象中,因为我找不到放置在那里的插件的任何引用。 registerPluginResource()
似乎将资源放入数组中。 不管您的问题如何。 答案是否定的。
您可以自己在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');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.