Zend Framework: ошибка Zend_DB - PullRequest
       7

Zend Framework: ошибка Zend_DB

1 голос
/ 25 января 2010

Я пытаюсь выучить ZF, но через 20 минут получаю странную ошибку:)

Fatal error: Uncaught exception 'Zend_Db_Adapter_Exception' with message 'Configuration array must have a key for 'dbname' that names the database instance'

Что означает эта ошибка? Я получил информацию о БД в моем конфигурационном файле:

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();
    }
}

configs / 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();    
    }
}

Ответы [ 3 ]

1 голос
/ 21 марта 2013

Чтобы, наконец, завершить это обсуждение правильным решением, вот мое:

application.ini:

resources.db.adapter = mysqli
resources.db.params.dbname = zftutorial
resources.db.params.host = localhost
resources.db.params.username = juuro
resources.db.params.password = test

Строка params отсутствует.

0 голосов
/ 16 сентября 2012

Похоже, что вы не запускаете приложение с правильным значением в переменной среды APPLICATION_ENV, а затем пытается загрузить другую часть файла конфигурации вместо development:production

Убедитесь, что ваше веб-приложение запущено в правильной среде var

  • Для Apache поместите это внутри вашего <virtualhost>

    SetEnv APPLICATION_ENV разработка

  • Также вы можете попробовать принудительно вызвать де APPLICATION_ENV var в index.php

0 голосов
/ 25 января 2010

Заменить

public static function setupDatabase()

С

protected function _initDatabase()

... и попробуйте еще раз

Полагаю, вы просто не вызываете определенный вами статический метод. Но когда вы создаете защищенный метод, начинающийся с _init, он автоматически выполняется при начальной загрузке.

PS:.
Возможно, вы действительно хотите назначить пароль для пользователя root вашей базы данных, даже если это тестовый сервер. Просто чтобы спасти. Если кто-то может получить доступ к вашему тест-серверу, вы можете предоставить ценную информацию о клиенте, если у вас нет пароля. root - первый пользователь, которого они попытаются. Еще лучше назначить отдельную комбинацию «пользователь / пароль» для каждой отдельной базы данных.

...