Zend Framework快速入门应用程序 - 数据库连接参数。他们怎么过的?

时间:2011-05-26 22:02:46

标签: php zend-framework

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

我理解了一些方法,但我想了解zend教程中的quickstart应用程序如何将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文件中获取数据库的详细信息吗?

非常感谢

3 个答案:

答案 0 :(得分:3)

使用Zend_Application_Resource_Db插件设置数据库适配器。

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

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

这是documentation for resource plugins

答案 1 :(得分:0)

简短的回答是,它发生在引导过程中。答案很长,为每个zpplication.ini部分创建了Zend_Config对象,并且从application.ini创建的Zend_Config用于配置特定于您的设置的DBAdapter,Zend_DB_Table_Abstract用它来查询其后备存储。很长的答案是......阅读代码和文档...

答案 2 :(得分:0)

根据我的理解封装回复,以便那些可能会遇到同样问题的人受益:

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;
    }

而且..瞧!