我正在学习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文件中获取数据库的详细信息吗?
非常感谢
答案 0 :(得分:3)
使用Zend_Application_Resource_Db插件设置数据库适配器。
引导程序使用应用程序的ini文件的db部分中的设置调用插件。它创建一个适配器,然后使用静态setDefaultAdapter方法将其设置为Zend_Db_Table的默认适配器。
然后将其用作所有表(扩展Zend_Db_Table_Abstract)的适配器,除非您将不同的适配器传递给它们的构造函数。
答案 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;
}
而且..瞧!