我正在调整我的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'
我如何解决这个问题?非常感谢。
答案 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);
希望这有帮助。