簡體   English   中英

使用默認資源時,Zend Db Adapter是否在注冊表中注冊?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM