Skip to content

Commit e10a894

Browse files
committed
Fix events compatibility
1 parent 0ea448c commit e10a894

File tree

3 files changed

+46
-13
lines changed

3 files changed

+46
-13
lines changed

pkg/async-event-dispatcher/DependencyInjection/AsyncEventsPass.php

+41-10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Symfony\Component\DependencyInjection\ContainerBuilder;
77
use Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass;
88
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
9+
use Symfony\Component\HttpKernel\Kernel;
910

1011
class AsyncEventsPass implements CompilerPassInterface
1112
{
@@ -21,6 +22,9 @@ public function process(ContainerBuilder $container): void
2122

2223
$defaultClient = $container->getParameter('enqueue.default_client');
2324

25+
// TODO: Remove when dropping Symfony < 5.3
26+
$useLegacyDispatcherConfig = (Kernel::VERSION_ID < 50300);
27+
2428
$registeredToEvent = [];
2529
foreach ($container->findTaggedServiceIds('kernel.event_listener') as $serviceId => $tagAttributes) {
2630
foreach ($tagAttributes as $tagAttribute) {
@@ -32,8 +36,10 @@ public function process(ContainerBuilder $container): void
3236

3337
$service = $container->getDefinition($serviceId);
3438

35-
$service->clearTag('kernel.event_listener');
36-
$service->addTag('enqueue.async_event_listener', $tagAttribute);
39+
if ($useLegacyDispatcherConfig) {
40+
$service->clearTag('kernel.event_listener');
41+
$service->addTag('enqueue.async_event_listener', $tagAttribute);
42+
}
3743

3844
if (false == isset($registeredToEvent[$event])) {
3945
$container->getDefinition('enqueue.events.async_listener')
@@ -43,6 +49,16 @@ public function process(ContainerBuilder $container): void
4349
])
4450
;
4551

52+
if (!$useLegacyDispatcherConfig) {
53+
$container->getDefinition('enqueue.events.async_listener')
54+
->addTag('kernel.event_listener', [
55+
'event' => $event,
56+
'method' => 'onEvent',
57+
'dispatcher' => 'enqueue.events.event_dispatcher',
58+
])
59+
;
60+
}
61+
4662
$container->getDefinition('enqueue.events.async_processor')
4763
->addTag('enqueue.processor', [
4864
'topic' => 'event.'.$event,
@@ -62,8 +78,11 @@ public function process(ContainerBuilder $container): void
6278
}
6379

6480
$service = $container->getDefinition($serviceId);
65-
$service->clearTag('kernel.event_subscriber');
66-
$service->addTag('enqueue.async_event_subscriber', $tagAttribute);
81+
82+
if ($useLegacyDispatcherConfig) {
83+
$service->clearTag('kernel.event_subscriber');
84+
$service->addTag('enqueue.async_event_subscriber', $tagAttribute);
85+
}
6786

6887
/** @var EventSubscriberInterface $serviceClass */
6988
$serviceClass = $service->getClass();
@@ -77,6 +96,16 @@ public function process(ContainerBuilder $container): void
7796
])
7897
;
7998

99+
if (!$useLegacyDispatcherConfig) {
100+
$container->getDefinition('enqueue.events.async_listener')
101+
->addTag('kernel.event_listener', [
102+
'event' => $event,
103+
'method' => 'onEvent',
104+
'dispatcher' => 'enqueue.events.event_dispatcher',
105+
])
106+
;
107+
}
108+
80109
$container->getDefinition('enqueue.events.async_processor')
81110
->addTag('enqueue.processor', [
82111
'topicName' => 'event.'.$event,
@@ -90,11 +119,13 @@ public function process(ContainerBuilder $container): void
90119
}
91120
}
92121

93-
$registerListenersPass = new RegisterListenersPass(
94-
'enqueue.events.event_dispatcher',
95-
'enqueue.async_event_listener',
96-
'enqueue.async_event_subscriber'
97-
);
98-
$registerListenersPass->process($container);
122+
if ($useLegacyDispatcherConfig) {
123+
$registerListenersPass = new RegisterListenersPass(
124+
'enqueue.events.event_dispatcher',
125+
'enqueue.async_event_listener',
126+
'enqueue.async_event_subscriber'
127+
);
128+
$registerListenersPass->process($container);
129+
}
99130
}
100131
}

pkg/enqueue-bundle/Tests/Functional/App/config/config-sf5.yml

+3-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ framework:
99
test: ~
1010
assets: false
1111
session:
12-
# the only option incompatible with Symfony 6
12+
# option incompatible with Symfony 6
1313
storage_id: session.storage.mock_file
1414
secret: '%secret%'
1515
router: { resource: '%kernel.project_dir%/config/routing.yml' }
@@ -88,6 +88,7 @@ services:
8888
public: true
8989
tags:
9090
- { name: 'kernel.event_listener', async: true, event: 'test_async', method: 'onEvent' }
91+
# In Symfony 6 you would also add "dispatcher: 'enqueue.events.event_dispatcher'"
9192

9293
test_command_subscriber_processor:
9394
class: 'Enqueue\Bundle\Tests\Functional\App\TestCommandSubscriberProcessor'
@@ -112,6 +113,7 @@ services:
112113
public: true
113114
tags:
114115
- { name: 'kernel.event_subscriber', async: true }
116+
# In Symfony 6 you would also add "dispatcher: 'enqueue.events.event_dispatcher'"
115117

116118
test_async_event_transformer:
117119
class: 'Enqueue\Bundle\Tests\Functional\App\TestAsyncEventTransformer'

pkg/enqueue-bundle/Tests/Functional/App/config/config.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ services:
8686
class: 'Enqueue\Bundle\Tests\Functional\App\TestAsyncListener'
8787
public: true
8888
tags:
89-
- { name: 'kernel.event_listener', async: true, event: 'test_async', method: 'onEvent' }
89+
- { name: 'kernel.event_listener', async: true, event: 'test_async', method: 'onEvent', dispatcher: 'enqueue.events.event_dispatcher' }
9090

9191
test_command_subscriber_processor:
9292
class: 'Enqueue\Bundle\Tests\Functional\App\TestCommandSubscriberProcessor'
@@ -110,7 +110,7 @@ services:
110110
class: 'Enqueue\Bundle\Tests\Functional\App\TestAsyncSubscriber'
111111
public: true
112112
tags:
113-
- { name: 'kernel.event_subscriber', async: true }
113+
- { name: 'kernel.event_subscriber', async: true, dispatcher: 'enqueue.events.event_dispatcher' }
114114

115115
test_async_event_transformer:
116116
class: 'Enqueue\Bundle\Tests\Functional\App\TestAsyncEventTransformer'

0 commit comments

Comments
 (0)