9

Db_TableMVC構造、特にクラスを使用せずにZendFrameworkを使用しようとしています。

データベーステーブルを表すクラスをいくつか作成しました。

class DBTables_Templates extends Zend_Db_Table_Abstract  
{  
    protected $_name = "templates";  
}  

このクラスをインスタンス化しようとすると(正常に含まれています)、次のエラーが発生します。

致命的なエラー:キャッチされない例外'Zend_Db_Table_Exception'とメッセージ'DBTables_Templates用のアダプターが見つかりません'

Db_Tableクラスが使用するデータベースアダプタを作成して含める方法を知っている人はいますか?

どんなポインタでも大歓迎です!最新バージョンのZFを使用しています。

4

1 に答える 1

15

データベースへの接続に使用するクラスであるZend_Db_Adapterを作成する必要があります。

$db = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host'     => '127.0.0.1',
    'username' => 'webuser',
    'password' => 'xxxxxxxx',
    'dbname'   => 'test'
));

または、このfactory()メソッドを使用して、インスタンス化をより構成可能にすることができます。

$db = Zend_Db::factory('Pdo_Mysql', array(
    'host'     => '127.0.0.1',
    'username' => 'webuser',
    'password' => 'xxxxxxxx',
    'dbname'   => 'test'
));

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

次に、このアダプタオブジェクトをテーブルクラスに指定します。これを行うには、少なくとも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-10-06T16:32:29.217 に答える