当前位置:  开发笔记 > 编程语言 > 正文

使用数据库处理程序提供Zend应用程序的"正确"方法是什么?

如何解决《使用数据库处理程序提供Zend应用程序的"正确"方法是什么?》经验,为你挑选了1个好方法。

假设您正在密切关注ZendApplication的约定,那么您应该在哪里设置数据库处理程序以供应用程序开发人员访问?

我知道如何设置ZendDb适配器.我想知道的是,在Zend Framework的上下文中,开发人员应该如何实例化他们的数据库处理程序,这样他们就不必担心一个请求中的多个实例化,每次都提供凭据等等.

例如,当开发人员使用Code Igniter并需要运行任意查询时,控制器上就有一个数据库处理程序.

$this->db->query(....

什么是Zend相当于这个约定?为了清楚起见,我可以想到使用Zend Framework提供的工具来实现这一目的的六种方法.我正在寻找的是Zend Framework在一般情况下如何要求你这样做.



1> Bill Karwin..:

我们的想法是您的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");
    }
}

就个人而言,我会使用第二种技术,因为那时我只需要在我的引导程序中访问资源注册表一次.在第一个例子中,我必须将相同的代码块复制到我的所有控制器.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有