1

プロジェクトの 1 つで Zend_Db を使用しています。コードの実行中に突然、Zend_Db_Adapter_Abstract の変数 $_db が null になるという問題があります。(私の DbTable_xx クラスの var_dump($this); で示されています)。

スクリプトの実行中にアダプターがどこかで null に設定されているようです。どうすればそれが起こりますか?

残念ながら、プロジェクトは複雑すぎてここにコードを投稿できません... このエラーが発生します (Zend_Db_Adapter_Abstract で find($primary) メソッドを実行しているときに):

Fatal error: Call to a member function quoteTableAs() 
on a non-object in xxx/library/Zend/Db/Table/Abstract.php on line 1162
4

2 に答える 2

1

Zend_Db_Table クラスに Db アダプタを設定するのを忘れている可能性があります。

少なくとも 3 つの方法でこれを行うことができます。

  • すべてのテーブルに対してアプリケーション全体のデフォルトを設定します。

    Zend_Db_Table_Abstract::setDefaultAdapter($db);
    
  • テーブル コンストラクターにアダプターを指定します。

    $table = new MyTable( array('db'=>$db) );
    
  • アダプタをレジストリに保存し、テーブルに指定するか、デフォルトとして設定します。

    Zend_Registry::set('my_db', $db); 
    $table = new MyTable( array('db'=>'my_db') );
    // alternatively:
    Zend_Db_Table_Abstract::setDefaultAdapter('my_db');
    

http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.constructingを参照してください。

于 2009-09-30T16:56:34.043 に答える
0

まあ、それはたいした情報ではありません。推測を避けたい場合は、Zend Framework のコピーを作成し、次のような php の組み込みデバッグ関数を使用して $_db を設定できるメソッドにトレーサ コードを追加することをお勧めします。

何が起こっているのかを知るために。結局のところ、それはオープンソースです!

于 2009-09-29T16:34:42.587 に答える