Zend Framework - DbAdapter问题

时间:2012-07-15 07:54:04

标签: zend-framework

我正在调整我的Zend框架,以便根据http://jonathanstreet.com/blog/adding-phpass-to-zend-framework/

使用phpass

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

Exception information:

Message: No entry is registered for key 'DbAdapter'

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

2 个答案:

答案 0 :(得分:1)

您必须通过在Acai_Auth_Adapter_DbTable中使用密钥Zend_Registry存储数据库适配器来定义数据库适配器,类DbAdapter应使用该数据库适配器。最好的地方是Bootstrap.php

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

如何设置在Zend Framework: Documentation: Zend_Db_Adapter下找到的数据库适配器。

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

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

我建议采用第一种方式,因为您可以使用Zend_Registry::get('DbAdapter')在应用程序的任何位置访问数据库适配器。

答案 1 :(得分: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);

希望这有帮助。