今天我买了一本书来学习Zend Framework 2.开始使用骨架应用程序&骨架模块,我取得了很好的进展,直到数据库交互开始。现在,每当我想对数据库执行某些操作时,我都会遇到以下异常:
Zend\ServiceManager\Exception\ServiceNotFoundException
File: /Applications/AMPPS/www/myproject/ZendSkeletonApplication/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:529
Message:
Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for Zend\Db\Adapter\Adapter
可能的原因可能是数据库详细信息不正确,但是对其他项目使用了相同的凭据,我知道它们是正确的(本地开发)。
我的global.php
看起来像这样 - 我看不到任何错误:
return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=mydatabasename;host=localhost',
'username' => 'root',
'password' => 'mysql',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory'
),
),
)
);
在堆栈跟踪之后,错误必须在此方法的开头:
protected function createUser(array $data)
{
$sm = $this->getServiceLocator();
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new \Zend\Db\ResultSet\ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new \Users\Model\User);
$tableGateway = new \Zend\Db\TableGateway\TableGateway('user', $dbAdapter, null, $resultSetPrototype);
$user = new User();
$user->exchangeArray($data);
$userTable = new UserTable($tableGateway);
$userTable->saveUser($user);
return true;
}
但是,我再也看不到任何错误,这让我有些困惑。我猜这个错误不仅仅是一个错字。
该方法所在的类使用以下Zend Framework 2组件(除了自写的组件):
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
我是否需要在此处添加内容,或许可以使用getServiceLocator()
方法?我不知道那个方法是找到的。
你有什么想法会导致这种异常吗?我正在使用Zend Framework 2.3.2
答案 0 :(得分:3)
您已将service_manager
密钥作为db
的子集。这是错的。
service_manager
密钥需要达到最高级别。
return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=mydatabasename;host=localhost',
'username' => 'root',
'password' => 'mysql',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory'
)
)
);