我成功地将doctrine2整合到我的apigility项目中。我设置我的控制器以扩展DoctrineResource,当我尝试使用$ this-> getObjectManager()获取实体管理器时,它返回NULL。
如果我通过服务管理器调用实体管理器它可以工作,但是如果我想使用诸如获取,创建等doctrineResources之类的父方法,它会崩溃,因为DoctrineModule \ Stdlib \ Hydrator(以及其他服务可能)将实体管理器作为第一个参数,但它收到NULL
为什么特征trait ProvideObjectManager中的此方法(getObjectManager())返回NULL。在其他项目中,它正在运作。在这里,我从头开始,无法找到问题
答案 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。