0

我正在用教义2学习zf2。

Doctrine2 实体不是放置逻辑的好地方,所以我必须创建类似服务的东西。

我在 src - Service 中创建了新目录,并且我认为我将创建 abstractService 类,默认情况下该类将具有对教义 2 实体管理器的访问权限,以及其他有用的东西。

但我不知道如何实现它,我创建了构造函数,我应该通过注入传递对象管理器的实例,但我不知道该怎么做。所有找到的示例都是针对控制器的。

有人可以告诉我如何管理/组织它吗?

我没有找到任何解决方案。

4

1 回答 1

0

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)管理。您可以使用getControllerConfigmodule.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);
            }
        )
    );
}

希望这可以帮助。

于 2013-10-26T20:49:14.090 回答