Использование таблиц базы данных Zend Framework без MVC - PullRequest
9 голосов
/ 06 октября 2009

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

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

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

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

Неустранимая ошибка: необработанное исключение "Zend_Db_Table_Exception" с сообщением "Не найден адаптер для DBTables_Templates"

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

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

1 Ответ

15 голосов
/ 06 октября 2009

Вам необходимо создать 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

...