0

http://jonathanstreet.com/blog/adding-phpass-to-zend-framework/に従って、phpassで動作するようにZendFrameworkを適応させています。

彼の手順に従って、私は彼のAcai_Auth_Adapter_DbTableでこのエラーに遭遇しました。

Exception information:

Message: No entry is registered for key 'DbAdapter'

これを解決するにはどうすればよいですか?どうもありがとう。

4

2 に答える 2

1

データベースアダプタを定義する必要があります。データベースアダプタをキーとともにAcai_Auth_Adapter_DbTable保存することにより、クラスが使用する必要があります。それを行うのに最適な場所はあなたです:Zend_RegistryDbAdapterBootstrap.php

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

Zend Frameworkの下にあるデータベースアダプタを設定する方法:ドキュメント:Zend_Db_Adapter

もう1つの方法は、データベースアダプタをパラメータとして渡すことです。

// 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 );

ただし、このすべてのブートストラップビジネスを回避する方法があります。1つのデータベースアダプタのみを使用している場合は、次を試してください。

//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 に答える