我正在用教义2学习zf2。
Doctrine2 实体不是放置逻辑的好地方,所以我必须创建类似服务的东西。
我在 src - Service 中创建了新目录,并且我认为我将创建 abstractService 类,默认情况下该类将具有对教义 2 实体管理器的访问权限,以及其他有用的东西。
但我不知道如何实现它,我创建了构造函数,我应该通过注入传递对象管理器的实例,但我不知道该怎么做。所有找到的示例都是针对控制器的。
有人可以告诉我如何管理/组织它吗?
我没有找到任何解决方案。
我正在用教义2学习zf2。
Doctrine2 实体不是放置逻辑的好地方,所以我必须创建类似服务的东西。
我在 src - Service 中创建了新目录,并且我认为我将创建 abstractService 类,默认情况下该类将具有对教义 2 实体管理器的访问权限,以及其他有用的东西。
但我不知道如何实现它,我创建了构造函数,我应该通过注入传递对象管理器的实例,但我不知道该怎么做。所有找到的示例都是针对控制器的。
有人可以告诉我如何管理/组织它吗?
我没有找到任何解决方案。
doctrine.entitymanager.orm_default
您可以使用八号或别名从服务管理器中检索默认的学说实体管理器Doctrine\ORM\EntityManager
。
$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)管理。您可以使用getControllerConfig
module.php 中的方法在控制器插件管理器上定义工厂。
将此添加到您的 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);
}
)
);
}
希望这可以帮助。