Я пытаюсь научиться ZF, но получил странную ошибку после 20 минут :)Zend Framework: Zend_Db Ошибка
Fatal error: Uncaught exception 'Zend_Db_Adapter_Exception' with message 'Configuration array must have a key for 'dbname' that names the database instance'
Что означает эта ошибка? Я получил информацию о DB в файле конфигурации:
resources.db.adapter=pdo_mysql
resources.db.host=localhost
resources.db.username=name
resources.db.password=pass
resources.db.dbname=name
Любые предложения?
EDIT:
Это мой файл модели /app/models/DbTable/Bands.php:
class Model_DbTable_Bands extends Zend_Db_Table_Abstract
{
protected $_name = 'zend_bands';
}
Индекс действия контроллера:
public function indexAction()
{
$albums = new Model_DbTable_Bands();
$this->view->albums = $albums->fetchAll();
}
EDIT Все коды:
bootstrap.php
protected function _initAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => dirname(__FILE__),
));
return $autoloader;
}
protected function _initDoctype()
{
$this->bootstrap('view');
$view = $this->getResource('view');
$view->doctype('XHTML1_STRICT');
}
public static function setupDatabase()
{
$config = self::$registry->configuration;
$db = Zend_Db::factory($config->db);
$db->query("SET NAMES 'utf8'");
self::$registry->database = $db;
Zend_Db_Table::setDefaultAdapter($db);
Zend_Db_Table_Abstract::setDefaultAdapter($db);
}
IndexController.php
class IndexController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
}
public function indexAction()
{
$albums = new Model_DbTable_Bands();
$this->view->albums = $albums->fetchAll();
}
}
конфиги/application.ini, изменили базу данных и при условии пароль:
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
db.adapter = PDO_MYSQL
db.params.host = localhost
db.params.username = root
db.params.password = pedro
db.params.dbname = test
модели/DbTable/Bands.php
class Model_DbTable_Bands extends Zend_Db_Table_Abstract
{
protected $_name = 'cakephp_bands';
public function getAlbum($id)
{
$id = (int)$id;
$row = $this->fetchRow('id = ' . $id);
if (!$row) {
throw new Exception("Count not find row $id");
}
return $row->toArray();
}
}
Можете ли вы показать код, в котором вы создаете экземпляр адаптера db? Код до и в том числе 'Zend_Db :: factory (/ * ваши настройки конфигурации * /)' (я полагаю) –
Вот вы, функция :) public static function setupDatabase() { $ config = self :: $ registry-> конфигурации; $ db = Zend_Db :: factory ($ config-> db-> adapter, $ config-> db-> toArray()); $ db-> query ("SET NAMES 'utf8'"); self :: $ registry-> database = $ db; Zend_Db_Table :: setDefaultAdapter ($ db); } \t PS Я не знаю, как включить код в комментарий, может ли кто-нибудь его исправить? –
Кроме того, есть информация о конфигурации, которую вы показываете, буквальная информация? Если да, я не предполагаю, что имя вашей базы данных является «именем»? Измените это, чтобы представить имя вашей базы данных. (вместе с именем пользователя и паролем для учетных данных, конечно) –