簡體   English   中英

使用數據庫處理程序提供Zend應用程序的“正確”方法是什么?

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

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