的想法是,你的引导读取配置文件,并声明配置条目以描述您想要创建的数据库适配器:
[bootstrap]
resources.db.adapter = Pdo_Mysql
resources.db.params.dbname = "mydatabase"
resources.db.params.username = "webuser"
resources.db.params.password = "XXXX"
resources.db.isDefaultTableAdapter = true
如果你使用了正确约定以下设定键,这个自动信号Bootstrap基类创建并初始化一个Zend_Application_Resource_Db
对象,并将其存储在bootstrap resource registry中。
在控制器的后面,您可以访问资源注册表。 说明:我在测试一段代码后编辑了这段代码。
class SomeController extends Zend_Controller_Action
{
public function init()
{
$bootstrap = $this->getInvokeArg("bootstrap");
if ($bootstrap->hasPluginResource("db")) {
$dbResource = $bootstrap->getPluginResource("db");
$db = $dbResource->getDbAdapter();
}
}
}
或者,你可以在你的引导类编写自定义的init方法,来保存对象在默认合适的词汇:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initDb()
{
if ($this->hasPluginResource("db")) {
$dbResource = $this->getPluginResource("db");
$db = $dbResource->getDbAdapter();
Zend_Registry::set("db", $db);
}
}
}
现在,您可以访问数据库对象一步到位,而不是三个:
class SomeController extends Zend_Controller_Action
{
public function init()
{
$db = Zend_Registry::get("db");
}
}
就我个人而言,我会使用第二种技术,因为那时我只能在我的引导程序中访问资源注册表一次。在第一个例子中,我将不得不将相同的代码块复制到我的所有控制器中。
我投票否决了因为把db放在注册表中是一个不好的做法。您应该扩展Zend_Controller_Action并从引导中获取db作为受保护的属性。 – venimus 2012-06-18 09:33:12