8000 feature #40262 [DoctrineBridge] Param as connection in `*.event_subsc… · symfony/symfony@ff83e85 · GitHub
[go: up one dir, main page]

Skip to content

Commit ff83e85

Browse files
committed
feature #40262 [DoctrineBridge] Param as connection in *.event_subscriber/listener tags (wbloszyk)
This PR was merged into the 5.4 branch. Discussion ---------- [DoctrineBridge] Param as connection in `*.event_subscriber/listener` tags | Q | A | ------------- | --- | Branch? | 5.x | Bug fix? | no | New feature? | yes | Deprecations? | no | Tickets | Fix #40260 | License | MIT | Doc PR | - It can be consider as bug, becouse using `%param%` is allowing in configuration, but can not be use in tag. It can be consider as feaure becouse tag should be provide by compiller pass. Commits ------- 99847c2 Allow using param as connection atribute in `*.event_subscriber` and `*.event_listener` tags
2 parents 2d817e1 + 99847c2 commit ff83e85

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ private function addTaggedServices(ContainerBuilder $container): array
7777
$managerDefs = [];
7878
foreach ($taggedServices as $taggedSubscriber) {
7979
[$tagName, $id, $tag] = $taggedSubscriber;
80-
$connections = isset($tag['connection']) ? [$tag['connection']] : array_keys($this->connections);
80+
$connections = isset($tag['connection'])
81+
? [$container->getParameterBag()->resolveValue($tag['connection'])]
82+
: array_keys($this->connections);
8183
if ($listenerTag === $tagName && !isset($tag['event'])) {
8284
throw new InvalidArgumentException(sprintf('Doctrine event listener "%s" must specify the "event" attribute.', $id));
8385
}

src/Symfony/Bridge/Doctrine/Tests/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPassTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ public function testProcessEventListenersWithMultipleConnections()
114114
{
115115
$container = $this->createBuilder(true);
116116

117+
$container->setParameter('connection_param', 'second');
118+
117119
$container
118120
->register('a', 'stdClass')
119121
->addTag('doctrine.event_listener', [
@@ -137,6 +139,14 @@ public function testProcessEventListenersWithMultipleConnections()
137139
])
138140
;
139141

142+
$container
143+
->register('d', 'stdClass')
144+
->addTag('doctrine.event_listener', [
145+
'event' => 'onFlush',
146+
'connection' => '%connection_param%',
147+
])
148+
;
149+
140150
$this->process($container);
141151

142152
$eventManagerDef = $container->getDefinition('doctrine.dbal.default_connection.event_manager');
@@ -167,6 +177,7 @@ public function testProcessEventListenersWithMultipleConnections()
167177
[
168178
[['onFlush'], 'a'],
169179
[['onFlush'], 'c'],
180+
[['onFlush'], 'd'],
170181
],
171182
$secondEventManagerDef->getArgument(1)
172183
);
@@ -178,6 +189,7 @@ public function testProcessEventListenersWithMultipleConnections()
178189
[
179190
'a' => new ServiceClosureArgument(new Reference('a')),
180191
'c' => new ServiceClosureArgument(new Reference('c')),
192+
'd' => new ServiceClosureArgument(new Reference('d')),
181193
],
182194
$serviceLocatorDef->getArgument(0)
183195
);
@@ -187,6 +199,8 @@ public function testProcessEventSubscribersWithMultipleConnections()
187199
{
188200
$container = $this->createBuilder(true);
189201

202+
$container->setParameter('connection_param', 'second');
203+
190204
$container
191205
->register('a', 'stdClass')
192206
->addTag('doctrine.event_subscriber', [
@@ -210,6 +224,14 @@ public function testProcessEventSubscribersWithMultipleConnections()
210224
])
211225
;
212226

227+
$container
228+
->register('d', 'stdClass')
229+
->addTag('doctrine.event_subscriber', [
230+
'event' => 'onFlush',
231+
'connection' => '%connection_param%',
232+
])
233+
;
234+
213235
$this->process($container);
214236

215237
$eventManagerDef = $container->getDefinition('doctrine.dbal.default_connection.event_manager');
@@ -240,6 +262,7 @@ public function testProcessEventSubscribersWithMultipleConnections()
240262
[
241263
'a',
242264
'c',
265+
'd',
243266
],
244267
$eventManagerDef->getArgument(1)
245268
);
@@ -250,6 +273,7 @@ public function testProcessEventSubscribersWithMultipleConnections()
250273
[
251274
'a' => new ServiceClosureArgument(new Reference('a')),
252275
'c' => new ServiceClosureArgument(new Reference('c')),
276+
'd' => new ServiceClosureArgument(new Reference('d')),
253277
],
254278
$serviceLocatorDef->getArgument(0)
255279
);

0 commit comments

Comments
 (0)
0