1

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

如果我通过服务管理器调用实体管理器,它可以工作,但是如果我想使用诸如 fetch、create 等教义资源的父方法,它会崩溃,因为 DoctrineModule\Stdlib\Hydrator(可能还有其他服务)将实体管理器作为第一个参数但是它收到 NULL

为什么 trait trait ProvidesObjectManager 中的这个方法 (getObjectManager()) 返回 NULL。在其他项目中它正在工作。在这里我从头开始,找不到问题

4

2 回答 2

0

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

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

解决问题的一种方法是在您的资源中注入 ObjectManager,方法是在您的以下代码中编写如下代码TestResourceFactory

<?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 来实例化您的资源。

我只使用 Zend Framework 2 的 Doctrine ORM 模块来编写我的 API。

zf-apigility-doctrine 的思想是与另一个工具集成的。请参阅此 youtube 视频http://www.youtube.com/watch?v=5apFQF3VE3M&t=5m30s

于 2014-08-29T22:24:08.547 回答
0

似乎$objectManager您的自定义(扩展)DoctrineResource侦听器从未被注入。

通常,学说ObjectManager/EntityManager通过DoctrineResourceFactory. 您可以在工厂的第 113 行看到这里。

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

于 2014-08-21T15:20:04.210 回答