Skip to content

Commit 9a3effe

Browse files
bug #60780 [FrameworkBundle] Fix argument not provided to add_bus_name_stamp_middleware (maxbaldanza)
This PR was merged into the 6.4 branch. Discussion ---------- [FrameworkBundle] Fix argument not provided to `add_bus_name_stamp_middleware` The bus name only gets provided to `add_bus_name_stamp_middleware` if using the default middlewares meaning that if you want to define the middlewares yourself then you need to define this service or you get an error: `Too few arguments to function Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware::__construct(), 0 passed` | Q | A | ------------- | --- | Branch? | 6.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Issues | | License | MIT Commits ------- 12b17e869dd [FrameworkBundle] Fix argument not provided to `add_bus_name_stamp_middleware`
2 parents e06d879 + 9064cf5 commit 9a3effe

File tree

5 files changed

+89
-4
lines changed

5 files changed

+89
-4
lines changed

DependencyInjection/FrameworkExtension.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2214,16 +2214,18 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
22142214
$defaultMiddleware['after'][0]['arguments'] = [$bus['default_middleware']['allow_no_senders']];
22152215
$defaultMiddleware['after'][1]['arguments'] = [$bus['default_middleware']['allow_no_handlers']];
22162216

2217-
// argument to add_bus_name_stamp_middleware
2218-
$defaultMiddleware['before'][0]['arguments'] = [$busId];
2219-
22202217
$middleware = array_merge($defaultMiddleware['before'], $middleware, $defaultMiddleware['after']);
22212218
}
22222219

2223-
foreach ($middleware as $middlewareItem) {
2220+
foreach ($middleware as $key => $middlewareItem) {
22242221
if (!$validationEnabled && \in_array($middlewareItem['id'], ['validation', 'messenger.middleware.validation'], true)) {
22252222
throw new LogicException('The Validation middleware is only available when the Validator component is installed and enabled. Try running "composer require symfony/validator".');
22262223
}
2224+
2225+
// argument to add_bus_name_stamp_middleware
2226+
if ('add_bus_name_stamp_middleware' === $middlewareItem['id']) {
2227+
$middleware[$key]['arguments'] = [$busId];
2228+
}
22272229
}
22282230

22292231
if ($container->getParameter('kernel.debug') && class_exists(Stopwatch::class)) {
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
$container->loadFromExtension('framework', [
4+
'annotations' => false,
5+
'http_method_override' => false,
6+
'handle_all_throwables' => true,
7+
'php_errors' => ['log' => true],
8+
'messenger' => [
9+
'default_bus' => 'messenger.bus.commands',
10+
'buses' => [
11+
'messenger.bus.commands' => [
12+
'default_middleware' => false,
13+
'middleware' => [
14+
'add_bus_name_stamp_middleware',
15+
'send_message',
16+
'handle_message',
17+
],
18+
],
19+
'messenger.bus.events' => [
20+
'default_middleware' => true,
21+
],
22+
],
23+
],
24+
]);
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<container xmlns="http://symfony.com/schema/dic/services"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:framework="http://symfony.com/schema/dic/symfony"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
6+
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
7+
8+
<framework:config http-method-override="false" handle-all-throwables="true">
9+
<framework:annotations enabled="false" />
10+
<framework:php-errors log="true" />
11+
<framework:messenger default-bus="messenger.bus.commands">
12+
<framework:bus name="messenger.bus.commands" default-middleware="false">
13+
<framework:middleware id="add_bus_name_stamp_middleware" />
14+
<framework:middleware id="send_message" />
15+
<framework:middleware id="handle_message" />
16+
</framework:bus>
17+
<framework:bus name="messenger.bus.events" default-middleware="true" />
18+
</framework:messenger>
19+
</framework:config>
20+
</container>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
framework:
2+
annotations: false
3+
http_method_override: false
4+
handle_all_throwables: true
5+
php_errors:
6+
log: true
7+
messenger:
8+
default_bus: messenger.bus.commands
9+
buses:
10+
messenger.bus.commands:
11+
default_middleware: false
12+
middleware:
13+
- "add_bus_name_stamp_middleware"
14+
- "send_message"
15+
- "handle_message"
16+
messenger.bus.events:
17+
default_middleware: true

Tests/DependencyInjection/FrameworkExtensionTestCase.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,6 +1102,28 @@ public function testMessengerWithMultipleBuses()
11021102
$this->assertSame('messenger.bus.commands', (string) $container->getAlias('messenger.default_bus'));
11031103
}
11041104

1105+
public function testMessengerWithAddBusNameStampMiddleware()
1106+
{
1107+
$container = $this->createContainerFromFile('messenger_bus_name_stamp');
1108+
1109+
$this->assertTrue($container->has('messenger.bus.commands'));
1110+
$this->assertEquals([
1111+
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
1112+
['id' => 'send_message', 'arguments' => []],
1113+
['id' => 'handle_message', 'arguments' => []],
1114+
], $container->getParameter('messenger.bus.commands.middleware'));
1115+
$this->assertTrue($container->has('messenger.bus.events'));
1116+
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
1117+
$this->assertEquals([
1118+
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
1119+
['id' => 'reject_redelivered_message_middleware'],
1120+
['id' => 'dispatch_after_current_bus'],
1121+
['id' => 'failed_message_processing_middleware'],
1122+
['id' => 'send_message', 'arguments' => [true]],
1123+
['id' => 'handle_message', 'arguments' => [false]],
1124+
], $container->getParameter('messenger.bus.events.middleware'));
1125+
}
1126+
11051127
public function testMessengerMiddlewareFactoryErroneousFormat()
11061128
{
11071129
$this->expectException(\InvalidArgumentException::class);

0 commit comments

Comments
 (0)