最近在用zf,眼下用到了zf的事务处理,事务处理封在zf的Adapter抽象类里面,使用事务,必先获得Adapter实例。Adapter是Zend_Db的灵魂所在,网上有诸多介绍她的使用的文章与示例,但诸多是以官方文档的模式给出:
但是在实际的项目中,我们的host\username\password等数据库配置数据都是统一配置在ini文件或xml文件中的,不可能会用到上文的形式。所以,我们必须获得加载了配置参数的adapter单例。
3、在前段, 引导程序Bootstrap逐个加载解析插件,来解析配置文件中的配置项:
4、关于数据库项,引导程序加载了Zend_Application_Resource_Db,并在init方法中调用了db_table的setDefaultAdapter方法,设置了在table中的缺省配置:
require_once 'Zend/Db.php';
$params = array ('host' => '127.0.0.1',
'username' => 'malory',
'password' => '******',
'dbname' => 'camelot');
$db = Zend_Db::factory('PDO_MYSQL', $params);
但是在实际的项目中,我们的host\username\password等数据库配置数据都是统一配置在ini文件或xml文件中的,不可能会用到上文的形式。所以,我们必须获得加载了配置参数的adapter单例。
但是,坑爹的zf文档讲得泛泛,DB家族各个成员之间的关系都描绘的糊里糊涂,根本不可能指望手册了,无奈有翻起了zf源码。经过一番苦读,终于大体理清了zend db在配置文件方面的条理:
1、在ini配置文件中,我们如是配置:
resources.db.adapter = "PDO_MYSQL"
resources.db.params.username = "db"
resources.db.params.password = "*****"
resources.db.params.dbname = "tb"
resources.db.params.charset = "utf8"
2、在前端,配置文件被传递给Zend_Application的构造函数,配置项的以解析加载:
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
3、在前段, 引导程序Bootstrap逐个加载解析插件,来解析配置文件中的配置项:
public function getPluginResources()
{
foreach (array_keys($this->_pluginResources) as $resource) {
$this->getPluginResource($resource);
}
return $this->_pluginResources;
}
4、关于数据库项,引导程序加载了Zend_Application_Resource_Db,并在init方法中调用了db_table的setDefaultAdapter方法,设置了在table中的缺省配置:
public function init()
{
if (null !== ($db = $this->getDbAdapter())) {
if ($this->isDefaultTableAdapter()) {
Zend_Db_Table::setDefaultAdapter($db);
}
return $db;
}
}
$db = Zend_Db_Table::getDefaultAdapter();
<结束,有关zf配置项及引导问题,参见:http://www.cnblogs.com/rexy/archive/2010/05/14/1735264.html>

本文深入探讨了Zend Framework(ZF)中的事务处理机制,特别是在Adapter抽象类内的应用。详细介绍了如何通过ini配置文件管理数据库连接参数,以及如何利用Zend_Application加载并解析这些配置,最终实现从Zend_Db_Table中获取默认Adapter实例。文章提供了实际项目中整合数据库配置的解决方案,避免了硬编码敏感信息,确保了系统的安全性与灵活性。

被折叠的 条评论
为什么被折叠?



