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