我正在尝试学习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'
这个错误是什么意思?我的配置文件中有DB信息:
resources.db.adapter=pdo_mysql
resources.db.host=localhost
resources.db.username=name
resources.db.password=pass
resources.db.dbname=name
有什么建议吗?
编辑:
这是我的模型文件/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();
}
}
答案 0 :(得分:1)
也许最终用正确的解决方案来结束这个讨论,这是我的:
的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
。
答案 1 :(得分:0)
替换
public static function setupDatabase()
使用
protected function _initDatabase()
...然后再试一次
我认为你根本就没有调用你定义的静态方法。但是当你创建一个以_init
开头的受保护方法时,它会在引导时自动执行。
PS:
您可能真的想为数据库的root用户分配密码,即使它是测试服务器。只是为了保存。如果有人能够访问您的测试服务器,如果您没有密码,则可以公开有价值的客户信息。 root
是他们将尝试的第一个用户。更好的是,将为每个单独的数据库分配不同的用户/通道组合。
答案 2 :(得分:0)
似乎您没有在APPLICATION_ENV
环境var中使用正确的值运行应用,然后尝试加载配置文件的其他部分而不是development:production
检查您是否在正确的环境var
下运行Web应用程序对于Apache,将其放在<virtualhost>
SetEnv APPLICATION_ENV development
您也可以尝试在index.php中强制使用de APPLICATION_ENV
var