【发布时间】:2017-07-10 04:25:42
【问题描述】:
在 Symfony 应用程序中不使用 Symfony 2.8 Event Dispatcher 和 Container 组件
来自我的引导程序/内核文件:
$this->container = new ContainerBuilder(new ParameterBag());
$this->getContainer()->addCompilerPass(new RegisterListenersPass());
$this->getContainer()->register('event_dispatcher', EventDispatcher::class);
$this->loadServiceConfig(); // See below for reference
/** @var EventDispatcher $ed */
$ed = $this->getContainer()->get('event_dispatcher');
// The next line works
$ed->addSubscriber(new SampleSubscriber());
...
private function loadServiceConfig()
{
$loader = new YamlFileLoader($this->container, new FileLocator(__DIR__);
$loader->load('config/services.yml');
}
来自config/services.yml:
services:
sample_subscriber:
class: Sample\Event\SampleSubscriber
public: true
tags:
- { name: kernel.event_subscriber }
手动订阅有效,但我希望事件会自动附加给定 yaml 文件中的标签
【问题讨论】:
-
您至少需要“编译”容器才能启动 RegisterListenerPass()。从未尝试在框架之外使用编译器传递,因此无法提供任何细节。
-
添加了 compile() 调用,但仍然没有骰子。我会进一步调查。
-
创建了一个接近你的独立示例,我验证它确实有效。 (如果您想参考):github.com/simshaun/so-45003754
标签: php symfony symfony-2.8 event-dispatching