Zend Framework Quickstart应用程序-数据库连接参数.他们是如何通过的


Zend Framework Quickstart Application - Database connection parameters. How are they passed?

我正在学习Zend Framework,我正在努力了解如何建立与数据库的连接。

我了解一些方法,但我想了解zend教程中的快速启动应用程序是如何将application.ini文件中的数据库参数传递到代码中的。有问题的页面在这里:http://framework.zend.com/manual/en/learning.quickstart.create-model.html.

我看不到获取参数的显式调用,我认为这与下面的类的工作方式有关。

class Application_Model_DbTable_Guestbook extends Zend_Db_Table_Abstract

有人能告诉我这个应用程序是如何从application.ini文件中获取数据库的详细信息的吗?

非常感谢

使用Zend_Application_Resource_DB插件设置DB适配器。

引导程序使用应用程序ini文件db部分的设置调用插件。它创建一个适配器,然后使用静态setDefaultAdapter方法将其设置为Zend_Db_Table的默认适配器。

然后,它被用作所有表(扩展Zend_Db_Table_Abstract)的适配器,除非您将不同的适配器传递给它们的构造函数。

这是资源插件的文档。

简单的答案是,它发生在引导过程中。详细的答案是,Zend_Config对象是为每个zApplication.ini节创建的,从application.ini创建的Zend_Config用于配置特定于您的设置的DBAdapter,Zend_DB_Table_Abstract用于查询其后备存储。长长的答案是…阅读代码和文档。。。

根据我的理解,为了那些可能陷入同一问题的人的利益,封装响应:

默认情况下,Zend_Application_Bootstrap类会将前缀为resources.db的任何内容加载为与Zend_db相关的资源。

下面的代码创建了一个类,用于命名数据库中的表。

class Application_Model_DbTable_Guestbook extends Zend_Db_Table_Abstract
{
    protected $_name = 'guestbook';
}

以下代码创建了上面的一个实例,这就是应用程序"知道"存在Zend_Db_Table类型对象的方式:

class Application_Model_GuestbookMapper
{
    protected $_dbTable;
    public function setDbTable($dbTable)
    {
        if (is_string($dbTable)) {
            $dbTable = new $dbTable(); // this line creates an object of type 
                                       // 'Application_Model_DbTable_Guestbook'...
        }
        if (!$dbTable instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Invalid table data gateway provided');
        }
        $this->_dbTable = $dbTable;
        return $this;
    }
    public function getDbTable()
    {
        if (null === $this->_dbTable) {
            $this->setDbTable('Application_Model_DbTable_Guestbook'); // ...from this line
        }
        return $this->_dbTable;
    }

而且。。哇!