我已经按照这里的文档创建了一个 RabbitMQ 消费者,但是,我需要能够EntityManager
在我的消费者中使用 Doctrine,我不知道如何做到这一点。
因为它是一个命令,所以我尝试扩展ConainerAwareCommand
,但是消费者的执行方法签名与这种类型不兼容。我发现没有明显的方法来覆盖构造函数和/或调用设置器无济于事,即使我将它创建为服务。
有没有其他人有任何经验如何做到这一点?
编辑:
我已经尝试将其创建为服务,并具有以下 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。是否有可能为容器实例化了一次类,但传递给命令的实例没有通过服务容器实例化?