【发布时间】:2013-04-29 20:56:57
【问题描述】:
我已经按照文档here 创建了一个 RabbitMQ 消费者,但是,我需要能够在我的消费者中使用 Doctrine EntityManager,我不知道如何做到这一点。
因为它是一个命令,所以我尝试扩展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);
}
}
当我在构造函数中var_dump() 时,我可以看到对象已正确实例化,但是当我在执行方法中var_dump() 时,entityManager 属性为 NULL。是否有可能为容器实例化了一次类,但传递给命令的实例没有通过服务容器实例化?
【问题讨论】: