我的dbAdapter出了什么问题?我正在浏览此tutorial,但我无法连接到数据库服务器。
以下是一些代码片段:
Module.php
use Zend\ModuleManager\ModuleManager;
use Zend\Mvc\MvcEvent;
use Acl\Model\Roles;
use Acl\Model\RolesTable;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;
...
public function getServiceConfig()
{
return array(
'factories' => array(
'Acl\Model\RolesTable' => function ($sm) {
$tableGateway = $sm->get('RolesTableGateway');
$table = new RolesTable($tableGateway);
return $table;
},
'RolesTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Roles());
return new TableGateway('acl_roles', $dbAdapter, null, $resultSetPrototype);
}
)
);
}
global.php
return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=mycms;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
)
),
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory'
)
)
);
您如何看待,我正在使用TableGateway。如果我进行转储,我可以看到来自exchangeArray()函数的键,但没有值。如果我删除global.php中的整个数据库连接,则没有任何变化。
连接本身是正确的,我可以获取数据并通过mysql连接。
任何想法?
答案 0 :(得分:0)
感谢您的提示。没有记录错误,我在mysql中创建了一个新用户,可以从任何主机访问 - 没有...
我将设置一个新骨架并复制并粘贴模块“Album”。可能是我的代码中有拼写错误。
编辑:我明白了! 在找到错误之前,这是我的控制器类。转储只是给出了一些没有期望值的键:
class AclController extends AbstractActionController
{
protected $rolesTable;
public function getAcl()
{
$roles = $this->getRolesTable()->fetchAll();
echo "<pre>"; var_dump($roles);
}
public function getRolesTable()
{
if (! $this->rolesTable) {
$sm = $this->getServiceLocator();
$this->rolesTable = $sm->get('\Acl\Model\RolesTable');
}
return $this->rolesTable;
}
public function setRolesTable($rolesTable)
{
$this->rolesTable = $rolesTable;
}
}
我添加了一个foreach,现在可以转储或回显结果:
public function getAcl()
{
$roles = $this->getRolesTable()->fetchAll();
foreach($roles as $role) {
echo $role->role_id;
echo $role->role_name;
echo $role->role_parent;
}
}
但是,我不明白,为什么我不能抛弃整个对象。