0

我正在调整我的 Zend 框架以根据以下内容使用 phpass:http: //jonathanstreet.com/blog/adding-phpass-to-zend-framework/

按照他的步骤,我在他的 Acai_Auth_Adapter_DbTable 中遇到了这个错误:

Exception information:

Message: No entry is registered for key 'DbAdapter'

我该如何解决这个问题?非常感谢。

4

2 回答 2

1

您必须定义数据库适配器,该类应该通过使用keyAcai_Auth_Adapter_DbTable存储数据库适配器来使用它。最好的地方是你的:Zend_RegistryDbAdapterBootstrap.php

protected function _initDb()
{
  // add code to create a `Zend_Db_Adapter_xxx`
  Zend_Registry::set('DbAdapter') = $dbAdapter;
}

如何设置您在Zend 框架下找到的数据库适配器:文档:Zend_Db_Adapter

另一种方法是将数据库适配器作为参数传递:

// create a database adapter
$authAdapter = new Acai_Auth_Adapter_DbTable( $dbAdpater ):

我会推荐第一种方式,因为这样您就可以使用Zend_Registry::get('DbAdapter').

于 2012-07-15T11:20:26.537 回答
1

假设您的数据库适配器已在 application.ini 中设置,类似于:

resources.db.adapter = "pdo_Mysql"
resources.db.params.username = "music"
resources.db.params.password = "music"
resources.db.params.dbname = "music"    
resources.db.isDefaultTableAdapter = true // add this line to make this adapter default, important if using more then one adapter.

在您的 bootstrap.php 中,您可以创建一个类似于以下内容的新方法:

 protected function _initDbAdapter() {//can be named anything as long as it starts with _init
        $db = new Zend_Config($this->getOptions('db'));//get all db adapter resources
        Zend_Registry::set('DbAdapter', $db); //save to Zend_registry key DbAdapter
    }

ByteNudger 关于如何使用注册表是正确的:
$authAdapter = new Acai_Auth_Adapter_DbTable( $dbAdpater );

然而,有一种方法可以避免所有这些引导业务。如果您只使用一个数据库适配器,请尝试:

//This will pass in the currently default adapter, if you only have one adapter...
$authAdapter = new Acai_Auth_Adapter_DbTable(Zend_Db::getDefaultAdapter);

希望这可以帮助。

于 2012-07-15T11:56:28.183 回答