Skip to content

Commit

Permalink
[DoctrineBridge] feat: deprecate passing doctrine subscribers to Cont…
Browse files Browse the repository at this point in the history
…ainerAwareEventManager
  • Loading branch information
alli83 committed Apr 3, 2023
1 parent 847416f commit 365b0a5
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 1 deletion.
2 changes: 2 additions & 0 deletions UPGRADE-6.3.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ DependencyInjection
DoctrineBridge
--------------

* Deprecate `$subscriberIds` in `ContainerAwareEventManager` class constructor, use of doctrine listener is a preferred alternative way
* Deprecate `addEventSubscriber`, `removeEventSubscriber`and `initializeSubscribers` in `ContainerAwareEventManager` class, use of doctrine listener is a preferred alternative way
* Deprecate `DoctrineDbalCacheAdapterSchemaSubscriber` in favor of `DoctrineDbalCacheAdapterSchemaListener`
* Deprecate `MessengerTransportDoctrineSchemaSubscriber` in favor of `MessengerTransportDoctrineSchemaListener`
* Deprecate `RememberMeTokenProviderDoctrineSchemaSubscriber` in favor of `RememberMeTokenProviderDoctrineSchemaListener`
Expand Down
2 changes: 2 additions & 0 deletions src/Symfony/Bridge/Doctrine/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ CHANGELOG
6.3
---

* Deprecate `$subscriberIds` in `ContainerAwareEventManager` class constructor, use of doctrine listener is a preferred alternative way
* Deprecate `addEventSubscriber`, `removeEventSubscriber`and `initializeSubscribers` in `ContainerAwareEventManager` class, use of doctrine listener is a preferred alternative way
* Add `AbstractSchemaListener`, `LockStoreSchemaListener` and `PdoSessionHandlerSchemaListener`
* Deprecate `DoctrineDbalCacheAdapterSchemaSubscriber` in favor of `DoctrineDbalCacheAdapterSchemaListener`
* Deprecate `MessengerTransportDoctrineSchemaSubscriber` in favor of `MessengerTransportDoctrineSchemaListener`
Expand Down
21 changes: 20 additions & 1 deletion src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,12 @@ class ContainerAwareEventManager extends EventManager
/**
* @param list<string|EventSubscriber|array{string[], string|object}> $subscriberIds List of subscribers, subscriber ids, or [events, listener] tuples
*/
public function __construct(ContainerInterface $container, array $subscriberIds = [])
public function __construct(ContainerInterface $container, /**@deprecated*/ array $subscriberIds = [])
{
if (\func_num_args() > 1) {
trigger_deprecation('symfony/doctrine-bridge', '6.3', 'The second argument passed to %s() is deprecated.', __METHOD__);
}

$this->container = $container;
$this->subscribers = $subscriberIds;
}
Expand Down Expand Up @@ -149,17 +153,27 @@ public function removeEventListener($events, $listener): void
}
}

/**
* @deprecated since version 6.3
*/
public function addEventSubscriber(EventSubscriber $subscriber): void
{
trigger_deprecation('symfony/doctrine-bridge', '6.3', 'Method "%s()" is deprecated.', __METHOD__);

if (!$this->initializedSubscribers) {
$this->initializeSubscribers();
}

parent::addEventSubscriber($subscriber);
}

/**
* @deprecated since version 6.3
*/
public function removeEventSubscriber(EventSubscriber $subscriber): void
{
trigger_deprecation('symfony/doctrine-bridge', '6.3', 'Method "%s()" is deprecated.', __METHOD__);

if (!$this->initializedSubscribers) {
$this->initializeSubscribers();
}
Expand All @@ -179,8 +193,13 @@ private function initializeListeners(string $eventName): void
}
}

/**
* @deprecated since version 6.3
*/
private function initializeSubscribers(): void
{
trigger_deprecation('symfony/doctrine-bridge', '6.3', 'Method "%s()" is deprecated.', __METHOD__);

$this->initializedSubscribers = true;
foreach ($this->subscribers as $subscriber) {
if (\is_array($subscriber)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,31 @@ protected function setUp(): void
$this->evm = new ContainerAwareEventManager($this->container);
}

/**
* @group legacy
*/
public function testDispatchEventRespectOrder()
{
$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: The second argument passed to Symfony\Bridge\Doctrine\ContainerAwareEventManager::__construct() is deprecated.');

$this->evm = new ContainerAwareEventManager($this->container, ['sub1', [['foo'], 'list1'], 'sub2']);

$this->container->set('list1', $listener1 = new MyListener());
$this->container->set('sub1', $subscriber1 = new MySubscriber(['foo']));
$this->container->set('sub2', $subscriber2 = new MySubscriber(['foo']));

$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Method "Symfony\Bridge\Doctrine\ContainerAwareEventManager::initializeSubscribers()" is deprecated.');

$this->assertSame([$subscriber1, $listener1, $subscriber2], array_values($this->evm->getListeners('foo')));
}

/**
* @group legacy
*/
public function testDispatchEvent()
{
$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: The second argument passed to Symfony\Bridge\Doctrine\ContainerAwareEventManager::__construct() is deprecated.');

$this->evm = new ContainerAwareEventManager($this->container, ['lazy4']);

$this->container->set('lazy4', $subscriber1 = new MySubscriber(['foo']));
Expand All @@ -57,6 +69,9 @@ public function testDispatchEvent()
$this->container->set('lazy3', $listener5 = new MyListener());
$this->evm->addEventListener('foo', $listener5 = new MyListener());
$this->evm->addEventListener('bar', $listener5);

$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Method "Symfony\Bridge\Doctrine\ContainerAwareEventManager::initializeSubscribers()" is deprecated.');
$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Method "Symfony\Bridge\Doctrine\ContainerAwareEventManager::addEventSubscriber()" is deprecated.');
$this->evm->addEventSubscriber($subscriber2 = new MySubscriber(['bar']));

$this->assertSame(1, $subscriber2->calledSubscribedEventsCount);
Expand All @@ -83,8 +98,13 @@ public function testDispatchEvent()
$this->assertSame(0, $subscriber2->calledByEventNameCount);
}

/**
* @group legacy
*/
public function testAddEventListenerAndSubscriberAfterDispatchEvent()
{
$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: The second argument passed to Symfony\Bridge\Doctrine\ContainerAwareEventManager::__construct() is deprecated.');

$this->evm = new ContainerAwareEventManager($this->container, ['lazy7']);

$this->container->set('lazy7', $subscriber1 = new MySubscriber(['foo']));
Expand All @@ -101,6 +121,9 @@ public function testAddEventListenerAndSubscriberAfterDispatchEvent()
$this->container->set('lazy3', $listener5 = new MyListener());
$this->evm->addEventListener('foo', $listener5 = new MyListener());
$this->evm->addEventListener('bar', $listener5);

$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Method "Symfony\Bridge\Doctrine\ContainerAwareEventManager::initializeSubscribers()" is deprecated.');
$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Method "Symfony\Bridge\Doctrine\ContainerAwareEventManager::addEventSubscriber()" is deprecated.');
$this->evm->addEventSubscriber($subscriber2 = new MySubscriber(['bar']));

$this->assertSame(1, $subscriber2->calledSubscribedEventsCount);
Expand All @@ -120,6 +143,8 @@ public function testAddEventListenerAndSubscriberAfterDispatchEvent()
$this->container->set('lazy6', $listener10 = new MyListener());
$this->evm->addEventListener('foo', $listener10 = new MyListener());
$this->evm->addEventListener('bar', $listener10);

$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Method "Symfony\Bridge\Doctrine\ContainerAwareEventManager::addEventSubscriber()" is deprecated.');
$this->evm->addEventSubscriber($subscriber3 = new MySubscriber(['bar']));

$this->assertSame(1, $subscriber1->calledSubscribedEventsCount);
Expand Down Expand Up @@ -162,15 +187,21 @@ public function testAddEventListenerAndSubscriberAfterDispatchEvent()
$this->assertSame(0, $subscriber3->calledByEventNameCount);
}

/**
* @group legacy
*/
public function testGetListenersForEvent()
{
$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: The second argument passed to Symfony\Bridge\Doctrine\ContainerAwareEventManager::__construct() is deprecated.');

$this->evm = new ContainerAwareEventManager($this->container, ['lazy2']);

$this->container->set('lazy', $listener1 = new MyListener());
$this->container->set('lazy2', $subscriber1 = new MySubscriber(['foo']));
$this->evm->addEventListener('foo', 'lazy');
$this->evm->addEventListener('foo', $listener2 = new MyListener());

$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Method "Symfony\Bridge\Doctrine\ContainerAwareEventManager::initializeSubscribers()" is deprecated.');
$this->assertSame([$subscriber1, $listener1, $listener2], array_values($this->evm->getListeners('foo')));
}

Expand All @@ -188,18 +219,28 @@ public function testGetListeners()
$this->assertSame([$listener1, $listener2], array_values($this->evm->getListeners()['foo']));
}

/**
* @group legacy
*/
public function testGetAllListeners()
{
$this->container->set('lazy', $listener1 = new MyListener());

$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Method "Symfony\Bridge\Doctrine\ContainerAwareEventManager::initializeSubscribers()" is deprecated.');
$this->evm->addEventListener('foo', 'lazy');
$this->evm->addEventListener('foo', $listener2 = new MyListener());

$this->assertSame([$listener1, $listener2], array_values($this->evm->getAllListeners()['foo']));
}

/**
* @group legacy
*/
public function testRemoveEventListener()
{
$this->container->set('lazy', $listener1 = new MyListener());

$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Method "Symfony\Bridge\Doctrine\ContainerAwareEventManager::initializeSubscribers()" is deprecated.');
$this->evm->addEventListener('foo', 'lazy');
$this->evm->addEventListener('foo', $listener2 = new MyListener());

Expand All @@ -210,9 +251,14 @@ public function testRemoveEventListener()
$this->assertSame([], $this->evm->getListeners('foo'));
}

/**
* @group legacy
*/
public function testRemoveEventListenerAfterDispatchEvent()
{
$this->container->set('lazy', $listener1 = new MyListener());

$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Method "Symfony\Bridge\Doctrine\ContainerAwareEventManager::initializeSubscribers()" is deprecated.');
$this->evm->addEventListener('foo', 'lazy');
$this->evm->addEventListener('foo', $listener2 = new MyListener());

Expand Down

0 comments on commit 365b0a5

Please sign in to comment.