![](/img/trans.png)
[英]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.