[英]What is the “right” Way to Provide a Zend Application With a Database Handler
假設您正在密切關注ZendApplication的約定,那么您應該在哪里設置數據庫處理程序以供應用程序開發人員訪問?
我知道如何設置ZendDb適配器。 我想知道的是,在Zend Framework的上下文中,開發人員應該如何實例化他們的數據庫處理程序,這樣他們就不必擔心一個請求中的多個實例化,每次都提供憑據等等。
例如,當開發人員使用Code Igniter並需要運行任意查詢時,控制器上就有一個數據庫處理程序。
$this->db->query(....
什么是Zend相當於這個約定? 為了清楚起見,我可以想到使用Zend Framework提供的工具來實現這一目的的六種方法。 我正在尋找的是Zend Framework在一般情況下如何要求你這樣做。
我們的想法是您的Bootstrap讀取配置文件並聲明配置條目以描述您要創建的數據庫適配器:
[bootstrap]
resources.db.adapter = Pdo_Mysql
resources.db.params.dbname = "mydatabase"
resources.db.params.username = "webuser"
resources.db.params.password = "XXXX"
resources.db.isDefaultTableAdapter = true
如果按照正確的約定使用配置鍵,則會自動通知Bootstrap基類以創建和初始化Zend_Application_Resource_Db
對象,並將其存儲在引導資源注冊表中 。
稍后在Controller中,您可以訪問資源注冊表。 注意:我在測試它之后編輯了這段代碼。
class SomeController extends Zend_Controller_Action
{
public function init()
{
$bootstrap = $this->getInvokeArg("bootstrap");
if ($bootstrap->hasPluginResource("db")) {
$dbResource = $bootstrap->getPluginResource("db");
$db = $dbResource->getDbAdapter();
}
}
}
或者,您可以在Bootstrap類中編寫自定義init方法,以將對象保存在默認的Zend_Registry中:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initDb()
{
if ($this->hasPluginResource("db")) {
$dbResource = $this->getPluginResource("db");
$db = $dbResource->getDbAdapter();
Zend_Registry::set("db", $db);
}
}
}
現在,您可以一步而不是三步訪問db對象:
class SomeController extends Zend_Controller_Action
{
public function init()
{
$db = Zend_Registry::get("db");
}
}
就個人而言,我會使用第二種技術,因為那時我只需要在我的引導程序中訪問資源注冊表一次。 在第一個例子中,我必須將相同的代碼塊復制到我的所有控制器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.