Skip to content

Commit eee47c7

Browse files
committed
[DoctrineBridge] feat: deprecate passing doctrine subscribers to ContainerAwareEventManager
1 parent 847416f commit eee47c7

File tree

5 files changed

+120
-42
lines changed

5 files changed

+120
-42
lines changed

UPGRADE-6.3.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ DependencyInjection
1717
DoctrineBridge
1818
--------------
1919

20+
* Deprecate passing Doctrine subscribers to `ContainerAwareEventManager` class, use listeners instead
2021
* Deprecate `DoctrineDbalCacheAdapterSchemaSubscriber` in favor of `DoctrineDbalCacheAdapterSchemaListener`
2122
* Deprecate `MessengerTransportDoctrineSchemaSubscriber` in favor of `MessengerTransportDoctrineSchemaListener`
2223
* Deprecate `RememberMeTokenProviderDoctrineSchemaSubscriber` in favor of `RememberMeTokenProviderDoctrineSchemaListener`

src/Symfony/Bridge/Doctrine/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ CHANGELOG
44
6.3
55
---
66

7+
* Deprecate passing Doctrine subscribers to `ContainerAwareEventManager` class, use listeners instead
78
* Add `AbstractSchemaListener`, `LockStoreSchemaListener` and `PdoSessionHandlerSchemaListener`
89
* Deprecate `DoctrineDbalCacheAdapterSchemaSubscriber` in favor of `DoctrineDbalCacheAdapterSchemaListener`
910
* Deprecate `MessengerTransportDoctrineSchemaSubscriber` in favor of `MessengerTransportDoctrineSchemaListener`

src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,9 @@ private function initializeSubscribers(): void
190190
if (\is_string($subscriber)) {
191191
$subscriber = $this->container->get($subscriber);
192192
}
193+
194+
trigger_deprecation('symfony/doctrine-bridge', '6.3', 'Using Doctrine subscribers as services is deprecated, declare listeners instead');
195+
193196
parent::addEventSubscriber($subscriber);
194197
}
195198
$this->subscribers = [];

src/Symfony/Bridge/Doctrine/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPass.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ private function addTaggedServices(ContainerBuilder $container): array
106106
$refs = $managerDef->getArguments()[1] ?? [];
107107
$listenerRefs[$con][$id] = new Reference($id);
108108
if ($subscriberTag === $tagName) {
109+
trigger_deprecation('symfony/doctrine-bridge', '6.3', 'Using Doctrine subscribers as services is deprecated, declare listeners instead');
110+
109111
$refs[] = $id;
110112
} else {
111113
$refs[] = [[$tag['event']], $id];

src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php

Lines changed: 113 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,30 @@ protected function setUp(): void
3232

3333
public function testDispatchEventRespectOrder()
3434
{
35-
$this->evm = new ContainerAwareEventManager($this->container, ['sub1', [['foo'], 'list1'], 'sub2']);
35+
$this->evm = new ContainerAwareEventManager($this->container, [[['foo'], 'list1'], [['foo'], 'list2']]);
3636

3737
$this->container->set('list1', $listener1 = new MyListener());
38+
$this->container->set('list2', $listener2 = new MyListener());
39+
40+
$this->assertSame([$listener1, $listener2], array_values($this->evm->getListeners('foo')));
41+
}
42+
43+
/**
44+
* @group legacy
45+
*/
46+
public function testDispatchEventRespectOrderWithSubscribers()
47+
{
48+
$this->evm = new ContainerAwareEventManager($this->container, ['sub1', 'sub2']);
49+
3850
$this->container->set('sub1', $subscriber1 = new MySubscriber(['foo']));
3951
$this->container->set('sub2', $subscriber2 = new MySubscriber(['foo']));
4052

41-
$this->assertSame([$subscriber1, $listener1, $subscriber2], array_values($this->evm->getListeners('foo')));
53+
$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Using Doctrine subscribers as services is deprecated, declare listeners instead');
54+
$this->assertSame([$subscriber1, $subscriber2], array_values($this->evm->getListeners('foo')));
4255
}
4356

4457
public function testDispatchEvent()
4558
{
46-
$this->evm = new ContainerAwareEventManager($this->container, ['lazy4']);
47-
48-
$this->container->set('lazy4', $subscriber1 = new MySubscriber(['foo']));
49-
$this->assertSame(0, $subscriber1->calledSubscribedEventsCount);
50-
5159
$this->container->set('lazy1', $listener1 = new MyListener());
5260
$this->evm->addEventListener('foo', 'lazy1');
5361
$this->evm->addEventListener('foo', $listener2 = new MyListener());
@@ -57,16 +65,10 @@ public function testDispatchEvent()
5765
$this->container->set('lazy3', $listener5 = new MyListener());
5866
$this->evm->addEventListener('foo', $listener5 = new MyListener());
5967
$this->evm->addEventListener('bar', $listener5);
60-
$this->evm->addEventSubscriber($subscriber2 = new MySubscriber(['bar']));
61-
62-
$this->assertSame(1, $subscriber2->calledSubscribedEventsCount);
6368

6469
$this->evm->dispatchEvent('foo');
6570
$this->evm->dispatchEvent('bar');
6671

67-
$this->assertSame(1, $subscriber1->calledSubscribedEventsCount);
68-
$this->assertSame(1, $subscriber2->calledSubscribedEventsCount);
69-
7072
$this->assertSame(0, $listener1->calledByInvokeCount);
7173
$this->assertSame(1, $listener1->calledByEventNameCount);
7274
$this->assertSame(0, $listener2->calledByInvokeCount);
@@ -77,40 +79,57 @@ public function testDispatchEvent()
7779
$this->assertSame(0, $listener4->calledByEventNameCount);
7880
$this->assertSame(1, $listener5->calledByInvokeCount);
7981
$this->assertSame(1, $listener5->calledByEventNameCount);
80-
$this->assertSame(0, $subscriber1->calledByInvokeCount);
81-
$this->assertSame(1, $subscriber1->calledByEventNameCount);
82-
$this->assertSame(1, $subscriber2->calledByInvokeCount);
83-
$this->assertSame(0, $subscriber2->calledByEventNameCount);
8482
}
8583

86-
public function testAddEventListenerAndSubscriberAfterDispatchEvent()
84+
/**
85+
* @group legacy
86+
*/
87+
public function testDispatchEventWithSubscribers()
8788
{
88-
$this->evm = new ContainerAwareEventManager($this->container, ['lazy7']);
89+
$this->evm = new ContainerAwareEventManager($this->container, ['lazy4']);
8990

90-
$this->container->set('lazy7', $subscriber1 = new MySubscriber(['foo']));
91+
$this->container->set('lazy4', $subscriber1 = new MySubscriber(['foo']));
9192
$this->assertSame(0, $subscriber1->calledSubscribedEventsCount);
9293

9394
$this->container->set('lazy1', $listener1 = new MyListener());
95+
$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Using Doctrine subscribers as services is deprecated, declare listeners instead');
9496
$this->evm->addEventListener('foo', 'lazy1');
97+
$this->evm->addEventListener('foo', $listener2 = new MyListener());
98+
$this->evm->addEventSubscriber($subscriber2 = new MySubscriber(['bar']));
99+
100+
$this->assertSame(1, $subscriber2->calledSubscribedEventsCount);
101+
102+
$this->evm->dispatchEvent('foo');
103+
$this->evm->dispatchEvent('bar');
104+
95105
$this->assertSame(1, $subscriber1->calledSubscribedEventsCount);
106+
$this->assertSame(1, $subscriber2->calledSubscribedEventsCount);
96107

108+
$this->assertSame(0, $listener1->calledByInvokeCount);
109+
$this->assertSame(1, $listener1->calledByEventNameCount);
110+
$this->assertSame(0, $listener2->calledByInvokeCount);
111+
$this->assertSame(1, $listener2->calledByEventNameCount);
112+
$this->assertSame(0, $subscriber1->calledByInvokeCount);
113+
$this->assertSame(1, $subscriber1->calledByEventNameCount);
114+
$this->assertSame(1, $subscriber2->calledByInvokeCount);
115+
$this->assertSame(0, $subscriber2->calledByEventNameCount);
116+
}
117+
118+
public function testAddEventListenerAfterDispatchEvent()
119+
{
120+
$this->container->set('lazy1', $listener1 = new MyListener());
121+
$this->evm->addEventListener('foo', 'lazy1');
97122
$this->evm->addEventListener('foo', $listener2 = new MyListener());
98123
$this->container->set('lazy2', $listener3 = new MyListener());
99124
$this->evm->addEventListener('bar', 'lazy2');
100125
$this->evm->addEventListener('bar', $listener4 = new MyListener());
101126
$this->container->set('lazy3', $listener5 = new MyListener());
102127
$this->evm->addEventListener('foo', $listener5 = new MyListener());
103128
$this->evm->addEventListener('bar', $listener5);
104-
$this->evm->addEventSubscriber($subscriber2 = new MySubscriber(['bar']));
105-
106-
$this->assertSame(1, $subscriber2->calledSubscribedEventsCount);
107129

108130
$this->evm->dispatchEvent('foo');
109131
$this->evm->dispatchEvent('bar');
110132

111-
$this->assertSame(1, $subscriber1->calledSubscribedEventsCount);
112-
$this->assertSame(1, $subscriber2->calledSubscribedEventsCount);
113-
114133
$this->container->set('lazy4', $listener6 = new MyListener());
115134
$this->evm->addEventListener('foo', 'lazy4');
116135
$this->evm->addEventListener('foo', $listener7 = new MyListener());
@@ -120,19 +139,10 @@ public function testAddEventListenerAndSubscriberAfterDispatchEvent()
120139
$this->container->set('lazy6', $listener10 = new MyListener());
121140
$this->evm->addEventListener('foo', $listener10 = new MyListener());
122141
$this->evm->addEventListener('bar', $listener10);
123-
$this->evm->addEventSubscriber($subscriber3 = new MySubscriber(['bar']));
124-
125-
$this->assertSame(1, $subscriber1->calledSubscribedEventsCount);
126-
$this->assertSame(1, $subscriber2->calledSubscribedEventsCount);
127-
$this->assertSame(1, $subscriber3->calledSubscribedEventsCount);
128142

129143
$this->evm->dispatchEvent('foo');
130144
$this->evm->dispatchEvent('bar');
131145

132-
$this->assertSame(1, $subscriber1->calledSubscribedEventsCount);
133-
$this->assertSame(1, $subscriber2->calledSubscribedEventsCount);
134-
$this->assertSame(1, $subscriber3->calledSubscribedEventsCount);
135-
136146
$this->assertSame(0, $listener1->calledByInvokeCount);
137147
$this->assertSame(2, $listener1->calledByEventNameCount);
138148
$this->assertSame(0, $listener2->calledByInvokeCount);
@@ -143,10 +153,6 @@ public function testAddEventListenerAndSubscriberAfterDispatchEvent()
143153
$this->assertSame(0, $listener4->calledByEventNameCount);
144154
$this->assertSame(2, $listener5->calledByInvokeCount);
145155
$this->assertSame(2, $listener5->calledByEventNameCount);
146-
$this->assertSame(0, $subscriber1->calledByInvokeCount);
147-
$this->assertSame(2, $subscriber1->calledByEventNameCount);
148-
$this->assertSame(2, $subscriber2->calledByInvokeCount);
149-
$this->assertSame(0, $subscriber2->calledByEventNameCount);
150156

151157
$this->assertSame(0, $listener6->calledByInvokeCount);
152158
$this->assertSame(1, $listener6->calledByEventNameCount);
@@ -158,16 +164,82 @@ public function testAddEventListenerAndSubscriberAfterDispatchEvent()
158164
$this->assertSame(0, $listener9->calledByEventNameCount);
159165
$this->assertSame(1, $listener10->calledByInvokeCount);
160166
$this->assertSame(1, $listener10->calledByEventNameCount);
167+
}
168+
169+
/**
170+
* @group legacy
171+
*/
172+
public function testAddEventListenerAndSubscriberAfterDispatchEvent()
173+
{
174+
$this->evm = new ContainerAwareEventManager($this->container, ['lazy7']);
175+
176+
$this->container->set('lazy7', $subscriber1 = new MySubscriber(['foo']));
177+
$this->assertSame(0, $subscriber1->calledSubscribedEventsCount);
178+
179+
$this->container->set('lazy1', $listener1 = new MyListener());
180+
$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Using Doctrine subscribers as services is deprecated, declare listeners instead');
181+
$this->evm->addEventListener('foo', 'lazy1');
182+
$this->assertSame(1, $subscriber1->calledSubscribedEventsCount);
183+
184+
$this->evm->addEventSubscriber($subscriber2 = new MySubscriber(['bar']));
185+
186+
$this->assertSame(1, $subscriber2->calledSubscribedEventsCount);
187+
188+
$this->evm->dispatchEvent('foo');
189+
$this->evm->dispatchEvent('bar');
190+
191+
$this->assertSame(1, $subscriber1->calledSubscribedEventsCount);
192+
$this->assertSame(1, $subscriber2->calledSubscribedEventsCount);
193+
194+
$this->container->set('lazy6', $listener2 = new MyListener());
195+
$this->evm->addEventListener('foo', $listener2 = new MyListener());
196+
$this->evm->addEventListener('bar', $listener2);
197+
$this->evm->addEventSubscriber($subscriber3 = new MySubscriber(['bar']));
198+
199+
$this->assertSame(1, $subscriber1->calledSubscribedEventsCount);
200+
$this->assertSame(1, $subscriber2->calledSubscribedEventsCount);
201+
$this->assertSame(1, $subscriber3->calledSubscribedEventsCount);
202+
203+
$this->evm->dispatchEvent('foo');
204+
$this->evm->dispatchEvent('bar');
205+
206+
$this->assertSame(1, $subscriber1->calledSubscribedEventsCount);
207+
$this->assertSame(1, $subscriber2->calledSubscribedEventsCount);
208+
$this->assertSame(1, $subscriber3->calledSubscribedEventsCount);
209+
210+
$this->assertSame(0, $listener1->calledByInvokeCount);
211+
$this->assertSame(2, $listener1->calledByEventNameCount);
212+
$this->assertSame(0, $subscriber1->calledByInvokeCount);
213+
$this->assertSame(2, $subscriber1->calledByEventNameCount);
214+
$this->assertSame(2, $subscriber2->calledByInvokeCount);
215+
$this->assertSame(0, $subscriber2->calledByEventNameCount);
216+
217+
$this->assertSame(1, $listener2->calledByInvokeCount);
218+
$this->assertSame(1, $listener2->calledByEventNameCount);
161219
$this->assertSame(1, $subscriber3->calledByInvokeCount);
162220
$this->assertSame(0, $subscriber3->calledByEventNameCount);
163221
}
164222

165223
public function testGetListenersForEvent()
224+
{
225+
$this->container->set('lazy', $listener1 = new MyListener());
226+
$this->evm->addEventListener('foo', 'lazy');
227+
$this->evm->addEventListener('foo', $listener2 = new MyListener());
228+
229+
$this->assertSame([$listener1, $listener2], array_values($this->evm->getListeners('foo')));
230+
}
231+
232+
/**
233+
* @group legacy
234+
*/
235+
public function testGetListenersForEventWhenSubscribersArePresent()
166236
{
167237
$this->evm = new ContainerAwareEventManager($this->container, ['lazy2']);
168238

169239
$this->container->set('lazy', $listener1 = new MyListener());
170240
$this->container->set('lazy2', $subscriber1 = new MySubscriber(['foo']));
241+
242+
$this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Using Doctrine subscribers as services is deprecated, declare listeners instead');
171243
$this->evm->addEventListener('foo', 'lazy');
172244
$this->evm->addEventListener('foo', $listener2 = new MyListener());
173245

@@ -191,18 +263,18 @@ public function testGetListeners()
191263
public function testGetAllListeners()
192264
{
193265
$this->container->set('lazy', $listener1 = new MyListener());
266+
194267
$this->evm->addEventListener('foo', 'lazy');
195268
$this->evm->addEventListener('foo', $listener2 = new MyListener());
196-
197269
$this->assertSame([$listener1, $listener2], array_values($this->evm->getAllListeners()['foo']));
198270
}
199271

200272
public function testRemoveEventListener()
201273
{
202274
$this->container->set('lazy', $listener1 = new MyListener());
275+
203276
$this->evm->addEventListener('foo', 'lazy');
204277
$this->evm->addEventListener('foo', $listener2 = new MyListener());
205-
206278
$this->evm->removeEventListener('foo', $listener2);
207279
$this->assertSame([$listener1], array_values($this->evm->getListeners('foo')));
208280

@@ -217,7 +289,6 @@ public function testRemoveEventListenerAfterDispatchEvent()
217289
$this->evm->addEventListener('foo', $listener2 = new MyListener());
218290

219291
$this->evm->dispatchEvent('foo');
220-
221292
$this->evm->removeEventListener('foo', $listener2);
222293
$this->assertSame([$listener1], array_values($this->evm->getListeners('foo')));
223294

0 commit comments

Comments
 (0)