Doctrine orm 在zf2中使用默认doctrine2连接创建自己的服务
我正在和Doctorine2一起学习zf2 Doctrine2实体不是放置逻辑的好地方,所以我必须创建类似服务的东西 我在src-Service中创建了新的catalog,我想我将创建abstractService类,默认情况下它将访问doctrine2实体管理器和其他有用的东西 但我不确定如何实现它,我创建了构造函数,在这里我应该通过注入传递对象管理器的实例,但我不知道如何实现。所有找到的示例都是针对控制器的 有人能告诉我怎么管理/组织吗Doctrine orm 在zf2中使用默认doctrine2连接创建自己的服务,doctrine-orm,zend-framework2,Doctrine Orm,Zend Framework2,我正在和Doctorine2一起学习zf2 Doctrine2实体不是放置逻辑的好地方,所以我必须创建类似服务的东西 我在src-Service中创建了新的catalog,我想我将创建abstractService类,默认情况下它将访问doctrine2实体管理器和其他有用的东西 但我不确定如何实现它,我创建了构造函数,在这里我应该通过注入传递对象管理器的实例,但我不知道如何实现。所有找到的示例都是针对控制器的 有人能告诉我怎么管理/组织吗 我没有找到任何解决方案。您可以使用doctrine.e
我没有找到任何解决方案。您可以使用doctrine.entitymanager.orm_default或别名
doctrine\orm\entitymanager
从服务管理器检索默认的doctrine实体管理器
$serviceLocator->get('Doctrine\ORM\EntityManager');
ZF2中依赖项注入的最佳实践是使用在服务管理器上注册的服务工厂。关于这一点,有很多信息可供参考
无论如何,我会解释步骤
您的服务
namespace MyNamespace
class MyService
{
public function __construct(EntityManager $em)
{
$this->em = $em;
}
}
工厂
在module.php中定义工厂
class Module
{
public function getServiceConfig()
{
return array(
'factories' => array(
'MyNamespace\MyService' => function($serviceLocator) {
return new MyService($serviceLocator->get('Doctrine\ORM\EntityManager');
}
)
);
}
}
在本例中,我使用了工厂的闭包,但建议使用专用的工厂类
现在,您可以从服务管理器中检索完全组合的服务
$serviceManager->get('MyNamespace\MyService');
如果你想在你的控制器中使用这个服务,你需要用我在上面做的同样的方法为它定义一个工厂。这里只有一个小小的区别,因为所有控制器都由一个单独的pluginManager(专门用于创建特定类型的类的serviceManager)管理。您可以使用module.php中的方法getControllerConfig
,在控制器插件管理器上定义工厂
将其添加到module.php中
public function getControllerConfig()
{
return array(
'factories' => array(
'MyNamespace\Controller\MyController' => function($serviceLocator)
{
$rootLocator = $serviceLocator->getServiceLocator();
$service = $rootLocator->get('MyNamespace\MyService');
return new MyController($service);
}
)
);
}
希望这有帮助