我希望在引导期间注册对注册表中的主数据库适配器的引用,以便它可以在我的站点中的其他地方使用(特别是授权操作).
我已经实现了一个丑陋的修复,我创建了一个Database Table对象并在其上调用getAdapter()方法并通过它.但是,这是一种不好的方式,我希望它可以通过注册表获得.
有谁知道如何做到这一点?任何帮助或指向正确的方向表示赞赏!
干杯斯图尔特
PS.我正在使用Zend Framework 1.8.
如果您正在使用Zend Framework 1.8+,并使用命令行工具创建项目,那么就像在application.ini
配置文件中注册数据库设置一样简单.
resources.db.adapter = "PDO_MYSQL" resources.db.params.host = "your.database.host" resources.db.params.dbname = "database_name" resources.db.params.username = "username" resources.db.params.password = "password" resources.db.isDefaultTableAdapter = true
如果您的数据库设置之前,resources.db
您甚至不需要在Bootstrap.php
文件中执行任何操作,因为它会为您执行此操作.此外,通过将设置isDefaultTableAdapter
设置为true
,您可以在应用程序的任何位置获取数据库适配器的实例.
$dbAdapter = Zend_Db_Table::getDefaultAdapter(); $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
谢谢你的回复.我决定改变接受的答案并发布我最终使用的解决方案 - 这最终是非常简单的!!
这基本上是基于Dcaunt的评论......
在bootstrap类..
protected function _initDb() { $resource = $bootstrap->getPluginResource('db'); $db = $resource->getDbAdapter(); Zend_Registry::set("db", $db); }
然后访问其他地方......
$dbAdapter = Zend_Registry::get("db");
感谢您的帮助,希望这有助于其他人.
你错过了最好的东西:)
如果您使用Zend_Db_Table模型(您应该是)等,那么您可以设置一个默认适配器 - 这种方式当您实例化模型时它关注的数据库连接 - 这样您就不需要将它保存在注册表中或打扰关于通过模型运行查询之前的连接.
我确实将它保存在注册表中供以后使用,但是我可以将其删除
protected function _initDB() { // Check that the config contains the correct database array. if ($this->_config->db) { // Instantiate the DB factory $dbAdapter = Zend_Db::factory($this->_config->db); // Set the DB Table default adaptor for auto connection in the models Zend_Db_Table::setDefaultAdapter($dbAdapter); // Add the DB Adaptor to the registry if we need to call it outside of the modules. Zend_Registry::set('dbAdapter', $dbAdapter); } }