我遵循文档here创建了RabbitMQ使用者,但是,我需要能够在我的使用者中使用Doctrine EntityManager
,并且我对如何处理这个。如何将EntityManager注入到RabbitMQBundle使用者
因为它是一个命令,我试图扩展ConainerAwareCommand
但是,消费者的执行方法签名与此类型不兼容。我没有发现任何明显的方法来重写构造函数和/或调用setter来无效,即使我将它创建为服务。
有没有其他人有任何经验,如何做到这一点?
编辑:
我已经尝试创建此作为一种服务,并具有以下services.yml:
import.video:
class: Acme\DemoBundle\Service\Consumer\ImportVideoConsumer
arguments:
entityManager: @doctrine.orm.entity_manager
与消费者看起来是这样的:
class ImportVideoConsumer implements ConsumerInterface
{
/**
* @var EntityManager
*/
private $entityMagager;
/**
* @param EntityManager $entityManager
*/
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
var_dump($entityManager);
}
/**
* Process the message
*
* @param AMQPMessage $msg
*/
public function execute(AMQPMessage $msg)
{
$body = json_decode($msg->body);
var_dump($this->entityMagager);
}
}
当I var_dump()
在构造函数中我可以看到该对象被正确实例化,但是当我在执行方法中使用var_dump()
时,entityManage r属性为NULL。这个类是否有可能为容器实例化一次,但传递给该命令的实例没有通过服务容器实例化?
请参阅我对我的进一步阐述问题 - 我曾尝试将此创建为服务,但EntityManager似乎从未正确指定。 – frak 2013-04-30 12:30:13
您的代码中存在拼写错误,它是您的属性中的$ entityManager,而不是$ entityMagager。 var_dump()中的同样错误:) – Mick 2013-04-30 14:07:41
嗯,我很高兴至少有一个人可以阅读; o)谢谢! – frak 2013-04-30 14:45:02