在我的Symfony2应用程序中,我创建了一个监听Doctrine事件的监听器。
这是我的听众课程:
use Symfony\Component\DependencyInjection\ContainerInterface;
class ProductListener
{
private $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function postPersist(Product $product, LifecycleEventArgs $args)
{
// some stuff
}
}
我想在构造函数中注入symfony DI容器。所以我配置我的services.xml:
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="doctrine.listener.product_listner.class">JDecool\Bundle\MyBundle\Listener\ProductListener</parameter>
</parameters>
<services>
<service id="doctrine.listener.product_listner" class="%doctrine.listener.product_listner.class%">
<argument type="service" id="service_container" />
<tag name="doctrine.event_listener" event="postPersist" />
</service>
</services>
</container>
配置看起来很好,因为我没有任何错误。但是当我的listner捕获一个事件时,构造函数依赖关系没有解决,我有这个错误:
ContextErrorException: Warning: Missing argument 1 for JDecool\Bundle\MyBundle\Listener\ProductListener::__construct()
我不明白为什么依赖无法解决。 我的监听器由我的实体中的 EntityListeners 注释注册。
感谢您的帮助。
答案 0 :(得分:1)
就像@Cerad所说的那样,EntityListeners注释与我注册的听众之间存在混淆。
如果我删除了ethe EntityListeners注释,它的工作完美无缺!