zend framework 1.11 中缺省数据配置是如何读取和存储的

最近在用zf,眼下用到了zf的事务处理,事务处理封在zf的Adapter抽象类里面,使用事务,必先获得Adapter实例。Adapter是Zend_Db的灵魂所在,网上有诸多介绍她的使用的文章与示例,但诸多是以官方文档的模式给出:

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


至此,我们的数据库配置项就固化在了Zend_Db_Table的缺省adapter中了。需要它的时候,不用在用db的factory来生产了,直接去Zend_Db_Table中拿缺省adapter即可:

$db = Zend_Db_Table::getDefaultAdapter();

<结束,有关zf配置项及引导问题,参见:http://www.cnblogs.com/rexy/archive/2010/05/14/1735264.html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值