2009-10-06 3 views
9

Я пытаюсь использовать Zend Framework без использования структуры MVC, в частности классов Db_Table.Использование Zend Framework Db Tables без MVC

Я создал несколько классов, представляющих мои таблицы базы данных, т.е.

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

Когда я пытаюсь создать экземпляр этого класса (он включен штраф), я получаю следующее сообщение об ошибке:

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

Кто-нибудь знает, как я создаю и включаю адаптер базы данных для классов Db_Table?

Любые указатели приветствуются! Я использую последнюю версию ZF.

ответ

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

Затем укажите этот объект адаптера в своем классе таблицы. Есть по крайней мере три способа сделать это:

  • Установите приложение шириной по умолчанию для всех таблиц:

    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

+0

Спасибо большое Билл, который работал лакомство! еще раз спасибо – Stuart