Apigility和Doctrine,getObjectManager返回NULL

时间:2014-08-21 11:08:42

标签: doctrine-orm apigility

我成功地将doctrine2整合到我的apigility项目中。我设置我的控制器以扩展DoctrineResource,当我尝试使用$ this-> getObjectManager()获取实体管理器时,它返回NULL。

如果我通过服务管理器调用实体管理器它可以工作,但是如果我想使用诸如获取,创建等doctrineResources之类的父方法,它会崩溃,因为DoctrineModule \ Stdlib \ Hydrator(以及其他服务可能)将实体管理器作为第一个参数,但它收到NULL

为什么特征trait ProvideObjectManager中的此方法(getObjectManager())返回NULL。在其他项目中,它正在运作。在这里,我从头开始,无法找到问题

2 个答案:

答案 0 :(得分:0)

您的$objectManager似乎永远不会注入您的自定义(扩展)DoctrineResource听众。

通常情况ObjectManager / EntityManager通过DoctrineResourceFactory注入听众。 您可以看到here in line 113 of the factory

您需要检查工厂是否正确构建资源侦听器。也许你没有正确注册工厂或类似的东西。但是没有任何代码,我很难说出问题究竟发生在哪里。

答案 1 :(得分:0)

DoctrineResourceFactory只会在他创建的资源中注入ObjectManager

在您的代码中创建TestResource的人是TestResourceFactory,我在此文件的第28行https://bitbucket.org/rump_shaker/test/src/800e79f5e9eef1cbb133bdd467b711e039660ed7/module/Api/config/module.config.php?at=master中看到了这一点。

解决问题的一种方法是在TestResourceFactory中编写类似的代码,在资源中注入ObjectManager:

<?php
namespace Api\V1\Rest\Test;

class TestResourceFactory
{
    public function __invoke($sm)
    {
        $config        = $sm->get('Config');
        $objectManager = $sm->get($config['object_manager']);
        $resource      = new TestResource();
        $resource->setObjectManager($objectManager); 
        return $resource;
    }
}

另一种方法是看看如何配置zf-apigility-doctrine来实现你的资源。

我只使用Doctrine ORM模块向Zend Framework 2编写带有doctrine的API。

zf-apigility-doctrine的想法与另一个工具集成在一起。观看此YouTube视频http://www.youtube.com/watch?v=5apFQF3VE3M&t=5m30s