Php Zend2依赖项注入工厂到服务
我正在尝试使用Zend2服务管理器实现依赖注入。我想在服务中注入一个PDO实例(我不使用Zend Db) 我在这里学习教程: 我让它为另一个服务工作,但是当注入PDO实例时,我得到以下错误: 可捕获的致命错误:传递给Application\Service\DataService::\uu construct()的参数1必须是Application\Service\DbConnectorService的实例,未给出任何实例,在第1077行的/srv/www/shared apps/approt/apps dev/ktrist/SBSDash/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php中调用,并在第24行的/srv/www/shared apps/approt/apps dev/ktrist/SBSDash/module/Application/src/Application/Service/DataService.php中定义 从教程来看,这似乎与module.config中的可调用项有关。但我搞不清楚问题是什么 任何建议都将不胜感激 这是我的密码: 数据服务:Php Zend2依赖项注入工厂到服务,php,pdo,dependency-injection,zend-framework2,Php,Pdo,Dependency Injection,Zend Framework2,我正在尝试使用Zend2服务管理器实现依赖注入。我想在服务中注入一个PDO实例(我不使用Zend Db) 我在这里学习教程: 我让它为另一个服务工作,但是当注入PDO实例时,我得到以下错误: 可捕获的致命错误:传递给Application\Service\DataService::\uu construct()的参数1必须是Application\Service\DbConnectorService的实例,未给出任何实例,在第1077行的/srv/www/shared apps/approt/a
class DataService {
protected $dbConnectorService;
public function __construct(DbConnectorService $dbConnectorService) {
$this->dbConnectorService = $dbConnectorService;
}
......
数据服务工厂:
namespace Application\Factory;
use Application\Service\DataService;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class DataServiceFactory implements FactoryInterface {
function createService(ServiceLocatorInterface $serviceLocator) {
$realServiceLocator = $serviceLocator->getServiceLocator();
$dbService = $realServiceLocator->get('Application\Service\DbConnectorService');
return new DataService($dbService);
}
}
Module.Config:
'controllers' => array(
'factories' => array(
'Application\Controller\Index' => 'Application\Factory\IndexControllerFactory',
'Application\Service\DataService' => 'Application\Factory\DataServiceFactory',
)
),
'service_manager' => array(
'invokables' => array(
'Application\Service\DataServiceInterface' => 'Application\Service\DataService',
'Application\Service\DbConnectorService' => 'Application\Service\DbConnectorService',
)
),
您正在尝试将服务创建为“可调用”类。ZF2将此服务视为一个没有依赖项的类(而不是使用工厂创建它) 您应该更新服务配置,以便在指向工厂类名的
'factories'
键下注册
'service_manager' => [
'invokables' => [
'Application\\Service\\DbConnectorService'
=> 'Application\\Service\\DbConnectorService',
],
'factories' => [
'Application\\Service\\DataServiceInterface'
=> 'Application\\Factory\\DataServiceFactory',
],
],
如果
DbConnectorService也有工厂,则需要对其进行相同的更改。您正在尝试将该服务创建为“可调用”类。ZF2将此服务视为一个没有依赖项的类(而不是使用工厂创建它)
您应该更新服务配置,以便在指向工厂类名的'factories'
键下注册
'service_manager' => [
'invokables' => [
'Application\\Service\\DbConnectorService'
=> 'Application\\Service\\DbConnectorService',
],
'factories' => [
'Application\\Service\\DataServiceInterface'
=> 'Application\\Factory\\DataServiceFactory',
],
],
如果DbConnectorService
也有工厂,则您需要对其进行相同的更改。您确定factory
位于控制器
阵列中吗?它应该在服务\u管理器中
。您确定工厂
在控制器
阵列中吗?它应该在服务管理器中
。