Php 容器容器容器容器喷溅器->;addSubscriberService()始终在服务中引发ClassNotFoundException

Php 容器容器容器容器喷溅器->;addSubscriberService()始终在服务中引发ClassNotFoundException,php,events,symfony,dependency-injection,Php,Events,Symfony,Dependency Injection,这是我的错误: ClassNotFoundException:试图从/var/www/project/vendor/symfony/symfony/src/symfony/Component/EventDispatcher/ContainerAwareEventDispatcher.php第143行中的全局命名空间加载类“EventSubscriber”。你忘了这个类的use语句了吗 问题故事: 好的,我读了一些关于很棒的containerwareeventdispatcher以及如何作为订户添

这是我的错误:

ClassNotFoundException:试图从/var/www/project/vendor/symfony/symfony/src/symfony/Component/EventDispatcher/ContainerAwareEventDispatcher.php第143行中的全局命名空间加载类“EventSubscriber”。你忘了这个类的use语句了吗

问题故事:

好的,我读了一些关于很棒的
containerwareeventdispatcher
以及如何作为订户添加
服务的文章。老兄,我真想这么做

问题是,我似乎完全无法做到这一点

我必须说,当我阅读这些文档时,我立即想知道应该在哪里实例化
ContainerWareeventdispatcher
。我决定将它放在
服务
构造函数中,并创建了一个名为
CentralDispatcher
的服务,在我看来,使调度器本身在服务中可访问是合乎逻辑的

在我尝试执行上述操作时遇到ClassNotFoundException之后:

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher;
use aktn\Bundle\Events\ProjectEvents;
use aktn\Bundle\Service\EventSubscriber;

class CentralDispatcher {

public function __construct() {

    $container = new ContainerBuilder();
    $dispatcher = new ContainerAwareEventDispatcher($container);

    $dispatcher->addSubscriberService(
        'EventSubscriberService',
        'EventSubscriber'
    );

    $dispatcher->addListenerService(ProjectEvents::EVENT_INITIALIZE, array('EventSubscriberService:', 'onInitialize'));
}
我决定我应该尝试将构造函数代码放在控制器中,看看它是否是我还不理解的东西(尽管这个问题可能会确切地暗示这一点),所以我尝试了以下方法:

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher;
use aktn\Bundle\Events\ProjectEvents;
use aktn\Bundle\Service\EventSubscriber;

 class DefaultController extends Controller
{
    public function indexAction()
    {


    $container = new ContainerBuilder();
    $dispatcher = new ContainerAwareEventDispatcher($container);

    $dispatcher->addSubscriberService(
        'EventSubscriberService',
        'EventSubscriber'
    );

    $dispatcher->addListenerService(ProjectEvents::EVENT_INITIALIZE, array('EventSubscriberService:', 'onInitialize'));

    return $this->render('DefaultBundle:Default:index.html.twig');
    }
}
但是我遇到了完全相同的
ClassNotFoundException
:(

然后我开始失去信心,试图将带有我的
EventSubscriber
服务的“实际的”
服务容器插入
ContainerAwareEventDispatcher

同样的错误。 即使我使用
$container->has('EventService');
它返回了
TRUE

我完全不知道该做什么,我很想取得进步。 在我知道之前,我将避免使用
ContainerAwareEventDispatcher
,并尝试使用它进行构建


谢谢!

我们已经围绕这个问题工作了一周,刚刚开始再次研究它

通过向addSubscriberService函数传递整个命名空间(而不仅仅是类名)来解决此问题,如下所示:

$dispatcher->addSubscriberService(
    'EventSubscriberService',
    'vendor\EventBundle\Service\EventSubscriber'
);
文档读到参数是服务的类名。
我会注意到这一点,并在不久的将来建议通过在Github上分叉来对文档进行更改。

您是在Symfony内部使用它还是作为一个单独的组件使用?如果您在Symfony内部使用它,那么这不是已经可以通过DI使用服务文件中的标记了吗?是的,在Symfony内部,它确实可以在具有标签
'debug.event\u dispatcher'
。但同样的情况也会发生,无论我将哪个服务id和类名传递给
addSubscriberService
方法,都会引发相同的异常。。