Skip to content

Commit

Permalink
Fix events compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewmy committed Feb 15, 2022
1 parent 77af744 commit 2277674
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 13 deletions.
51 changes: 41 additions & 10 deletions pkg/async-event-dispatcher/DependencyInjection/AsyncEventsPass.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Kernel;

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

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

// TODO: Remove when dropping Symfony < 5.3
$useLegacyDispatcherConfig = (Kernel::VERSION_ID < 50300);

$registeredToEvent = [];
foreach ($container->findTaggedServiceIds('kernel.event_listener') as $serviceId => $tagAttributes) {
foreach ($tagAttributes as $tagAttribute) {
Expand All @@ -32,8 +36,10 @@ public function process(ContainerBuilder $container): void

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

$service->clearTag('kernel.event_listener');
$service->addTag('enqueue.async_event_listener', $tagAttribute);
if ($useLegacyDispatcherConfig) {
$service->clearTag('kernel.event_listener');
$service->addTag('enqueue.async_event_listener', $tagAttribute);
}

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

if (!$useLegacyDispatcherConfig) {
$container->getDefinition('enqueue.events.async_listener')
->addTag('kernel.event_listener', [
'event' => $event,
'method' => 'onEvent',
'dispatcher' => 'enqueue.events.event_dispatcher',
])
;
}

$container->getDefinition('enqueue.events.async_processor')
->addTag('enqueue.processor', [
'topic' => 'event.'.$event,
Expand All @@ -62,8 +78,11 @@ public function process(ContainerBuilder $container): void
}

$service = $container->getDefinition($serviceId);
$service->clearTag('kernel.event_subscriber');
$service->addTag('enqueue.async_event_subscriber', $tagAttribute);

if ($useLegacyDispatcherConfig) {
$service->clearTag('kernel.event_subscriber');
$service->addTag('enqueue.async_event_subscriber', $tagAttribute);
}

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

if (!$useLegacyDispatcherConfig) {
$container->getDefinition('enqueue.events.async_listener')
->addTag('kernel.event_listener', [
'event' => $event,
'method' => 'onEvent',
'dispatcher' => 'enqueue.events.event_dispatcher',
])
;
}

$container->getDefinition('enqueue.events.async_processor')
->addTag('enqueue.processor', [
'topicName' => 'event.'.$event,
Expand All @@ -90,11 +119,13 @@ public function process(ContainerBuilder $container): void
}
}

$registerListenersPass = new RegisterListenersPass(
'enqueue.events.event_dispatcher',
'enqueue.async_event_listener',
'enqueue.async_event_subscriber'
);
$registerListenersPass->process($container);
if ($useLegacyDispatcherConfig) {
$registerListenersPass = new RegisterListenersPass(
'enqueue.events.event_dispatcher',
'enqueue.async_event_listener',
'enqueue.async_event_subscriber'
);
$registerListenersPass->process($container);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ framework:
test: ~
assets: false
session:
# the only option incompatible with Symfony 6
# option incompatible with Symfony 6
storage_id: session.storage.mock_file
secret: '%secret%'
router: { resource: '%kernel.project_dir%/config/routing.yml' }
Expand Down Expand Up @@ -88,6 +88,7 @@ services:
public: true
tags:
- { name: 'kernel.event_listener', async: true, event: 'test_async', method: 'onEvent' }
# In Symfony 6 you would also add "dispatcher: 'enqueue.events.event_dispatcher'"

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

test_async_event_transformer:
class: 'Enqueue\Bundle\Tests\Functional\App\TestAsyncEventTransformer'
Expand Down
4 changes: 2 additions & 2 deletions pkg/enqueue-bundle/Tests/Functional/App/config/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ services:
class: 'Enqueue\Bundle\Tests\Functional\App\TestAsyncListener'
public: true
tags:
- { name: 'kernel.event_listener', async: true, event: 'test_async', method: 'onEvent' }
- { name: 'kernel.event_listener', async: true, event: 'test_async', method: 'onEvent', dispatcher: 'enqueue.events.event_dispatcher' }

test_command_subscriber_processor:
class: 'Enqueue\Bundle\Tests\Functional\App\TestCommandSubscriberProcessor'
Expand All @@ -110,7 +110,7 @@ services:
class: 'Enqueue\Bundle\Tests\Functional\App\TestAsyncSubscriber'
public: true
tags:
- { name: 'kernel.event_subscriber', async: true }
- { name: 'kernel.event_subscriber', async: true, dispatcher: 'enqueue.events.event_dispatcher' }

test_async_event_transformer:
class: 'Enqueue\Bundle\Tests\Functional\App\TestAsyncEventTransformer'
Expand Down

0 comments on commit 2277674

Please sign in to comment.