2009-10-06 11 views
9

Ich versuche, das Zend Framework zu verwenden, ohne die MVC-Struktur zu verwenden, speziell die Db_Table Klassen.Verwenden von Zend Framework DB-Tabellen ohne MVC

ich ein paar Klassen erstellt haben meine Datenbanktabellen repräsentieren, dh

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

Wenn ich versuche, diese Klasse zu instanziieren (es ist im Preis inbegriffen fein), erhalte ich folgende Fehlermeldung:

Fatal error: Uncaught exception 'Zend_Db_Table_Exception' with message 'No adapter found for DBTables_Templates'

Weiß jemand, wie ich den Datenbankadapter für die Klassen Db_Table erstellen und einbeziehen kann?

Alle Zeiger werden sehr geschätzt! Ich benutze die neueste Version von ZF.

Antwort

15

Sie müssen einen Zend_Db_Adapter erstellen, die Klasse, mit der Sie sich mit der Datenbank verbinden.

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

Oder können Sie die factory() Methode Instanziierung mehr konfigurierbar machen:

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

Siehe http://framework.zend.com/manual/en/zend.db.html#zend.db.adapter.connecting

Dann Objekt diesen Adapter angeben Klasse auf den Tisch. Es gibt mindestens drei Möglichkeiten, dies zu tun:

  • Stellen Sie eine anwendungsweite Standard für alle Tabellen:

    Zend_Db_Table_Abstract::setDefaultAdapter($db); 
    
  • Geben Sie den Adapter an den Tabellenkonstruktor:

    $table = new MyTable(array('db'=>$db)); 
    
  • Speichern Sie den Adapter in der Registrierung und legen Sie ihn in der Tabelle fest oder legen Sie ihn als Standard fest:

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

Siehe http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.constructing

+0

Vielen Dank Bill, die eine Behandlung funktionierte! Danke noch einmal – Stuart