我正在尝试通过给出的骨架应用程序来学习Zend Framework 2,但是我没有任何Zend的经验。我从其他框架知道MVC,例如yii,symfony。
我的骨架应用似乎正常加载,然后下一步是将MySQL数据库连接配置到应用程序中。所以我试着回答问题的答案:
Zend Frameworkd 2 Database connection
但那对我没用,所以我想知道为什么。我的代码是:
在config/autoload/
文件夹中,我创建了一个名为db.local.php
的文件,并添加了以下内容:
return array(
'db' => array(
'driver' => 'Mysqli',
'database' => 'xxx',
'username' => 'sxxx',
'password' => 'xxxE',
'hostname' => 'localhost'
),
'service_manager' => array(
'aliases' => array(
'db' => 'Zend\Db\Adapter\Adapter',
),
),
);
在文件IndexController.php的/module/Application/src/Application/Controller
中的默认控制器中,我添加了以下内容来测试数据库,但是我没有看到任何错误或来自此控制器的任何输出:
public function indexAction()
{
$this->layout()->myvar = 'bla';
$db=$this->getServiceLocator()->get('db');
//var_dump($db); nothing comes here too.
$statement= $db->query('SELECT * FROM `ew_content` WHERE `con_id` = 1');
var_dump($statement); // this also empty
$isconnected = $db->getDriver()->getConnection()->isConnected();
if($isconnected){
$message = 'connected';
} else {
$message = 'not Valid data field';
}
//no output here either
return new ViewModel(array(
'customMessageForgotPassword' => 'Error!',
));
}
答案 0 :(得分:1)
感谢akond,实际问题看起来我在服务管理器配置中创建了db对象的工厂。所以我必须将以下行添加到db.local.php
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
),
),
配置的完整工作代码如下,
return array(
'db' => array(
'driver' => 'Mysqli',
'username' => 'xxx',
'password' => 'xxx',
'database' => 'xxxx',
'host' => 'localhost'
),
'service_manager' => array(
'factories' => array(
'translator' => 'MvcTranslator',
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
),
'aliases' => array(
'db' => 'Zend\Db\Adapter\Adapter',
),
),
);