Skip to content

Commit c097744

Browse files
babeuloulafabpot
authored andcommitted
[Messenger] Add option allow_no_senders to enable throwing when a message doesn't have a sender
1 parent ac574f5 commit c097744

File tree

7 files changed

+47
-20
lines changed

7 files changed

+47
-20
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ CHANGELOG
2020
* Remove `@internal` tag from secret vaults to allow them to be used directly outside the framework bundle and custom vaults to be added
2121
* Deprecate `framework.form.legacy_error_messages` config node
2222
* Add a `framework.router.cache_dir` configuration option to configure the default `Router` `cache_dir` option
23+
* Add option `framework.messenger.buses.*.default_middleware.allow_no_senders` to enable throwing when a message doesn't have a sender
2324

2425
6.1
2526
---

DependencyInjection/Configuration.php

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1521,15 +1521,36 @@ function ($a) {
15211521
->end()
15221522
->scalarNode('default_bus')->defaultNull()->end()
15231523
->arrayNode('buses')
1524-
->defaultValue(['messenger.bus.default' => ['default_middleware' => true, 'middleware' => []]])
1524+
->defaultValue(['messenger.bus.default' => ['default_middleware' => ['enabled' => true, 'allow_no_handlers' => false, 'allow_no_senders' => true], 'middleware' => []]])
15251525
->normalizeKeys(false)
15261526
->useAttributeAsKey('name')
15271527
->arrayPrototype()
15281528
->addDefaultsIfNotSet()
15291529
->children()
1530-
->enumNode('default_middleware')
1531-
->values([true, false, 'allow_no_handlers'])
1532-
->defaultTrue()
1530+
->arrayNode('default_middleware')
1531+
->beforeNormalization()
1532+
->ifTrue(function ($defaultMiddleware) { return \is_string($defaultMiddleware) || \is_bool($defaultMiddleware); })
1533+
->then(function ($defaultMiddleware): array {
1534+
if (\is_string($defaultMiddleware) && 'allow_no_handlers' === $defaultMiddleware) {
1535+
return [
1536+
'enabled' => true,
1537+
'allow_no_handlers' => true,
1538+
'allow_no_senders' => true,
1539+
];
1540+
}
1541+
1542+
return [
1543+
'enabled' => $defaultMiddleware,
1544+
'allow_no_handlers' => false,
1545+
'allow_no_senders' => true,
1546+
];
1547+
})
1548+
->end()
1549+
->canBeDisabled()
1550+
->children()
1551+
->booleanNode('allow_no_handlers')->defaultFalse()->end()
1552+
->booleanNode('allow_no_senders')->defaultTrue()->end()
1553+
->end()
15331554
->end()
15341555
->arrayNode('middleware')
15351556
->performNoDeepMerging()

DependencyInjection/FrameworkExtension.php

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2035,12 +2035,9 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
20352035
foreach ($config['buses'] as $busId => $bus) {
20362036
$middleware = $bus['middleware'];
20372037

2038-
if ($bus['default_middleware']) {
2039-
if ('allow_no_handlers' === $bus['default_middleware']) {
2040-
$defaultMiddleware['after'][1]['arguments'] = [true];
2041-
} else {
2042-
unset($defaultMiddleware['after'][1]['arguments']);
2043-
}
2038+
if ($bus['default_middleware']['enabled']) {
2039+
$defaultMiddleware['after'][0]['arguments'] = [$bus['default_middleware']['allow_no_senders']];
2040+
$defaultMiddleware['after'][1]['arguments'] = [$bus['default_middleware']['allow_no_handlers']];
20442041

20452042
// argument to add_bus_name_stamp_middleware
20462043
$defaultMiddleware['before'][0]['arguments'] = [$busId];

Resources/config/messenger.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
abstract_arg('senders service locator'),
5656
])
5757
->set('messenger.middleware.send_message', SendMessageMiddleware::class)
58+
->abstract()
5859
->args([
5960
service('messenger.senders_locator'),
6061
service('event_dispatcher'),

Resources/config/schema/symfony-1.0.xsd

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@
426426
</xsd:restriction>
427427
</xsd:simpleType>
428428

429-
<xsd:simpleType name="default_middleware">
429+
<xsd:simpleType name="default_middleware_attr">
430430
<xsd:restriction base="xsd:string">
431431
<xsd:enumeration value="true" />
432432
<xsd:enumeration value="false" />
@@ -436,6 +436,12 @@
436436
</xsd:restriction>
437437
</xsd:simpleType>
438438

439+
<xsd:complexType name="default_middleware_elem">
440+
<xsd:attribute name="enabled" type="xsd:boolean" />
441+
<xsd:attribute name="allow_no_handlers" type="xsd:boolean" />
442+
<xsd:attribute name="allow_no_senders" type="xsd:boolean" />
443+
</xsd:complexType>
444+
439445
<xsd:simpleType name="cookie_secure">
440446
<xsd:restriction base="xsd:string">
441447
<xsd:enumeration value="true" />
@@ -567,10 +573,11 @@
567573

568574
<xsd:complexType name="messenger_bus">
569575
<xsd:sequence>
576+
<xsd:element name="default-middleware" type="default_middleware_elem" minOccurs="0" maxOccurs="unbounded"/>
570577
<xsd:element name="middleware" type="messenger_middleware" minOccurs="0" maxOccurs="unbounded" />
571578
</xsd:sequence>
572579
<xsd:attribute name="name" type="xsd:string" use="required"/>
573-
<xsd:attribute name="default-middleware" type="default_middleware"/>
580+
<xsd:attribute name="default-middleware" type="default_middleware_attr"/>
574581
</xsd:complexType>
575582

576583
<xsd:complexType name="messenger_middleware">

Tests/DependencyInjection/ConfigurationTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -383,19 +383,19 @@ public function testBusMiddlewareDontMerge()
383383
$this->assertEquals(
384384
[
385385
'existing_bus' => [
386-
'default_middleware' => true,
386+
'default_middleware' => ['enabled' => true, 'allow_no_handlers' => false, 'allow_no_senders' => true],
387387
'middleware' => [
388388
['id' => 'existing_bus.middleware', 'arguments' => []],
389389
],
390390
],
391391
'common_bus' => [
392-
'default_middleware' => false,
392+
'default_middleware' => ['enabled' => false, 'allow_no_handlers' => false, 'allow_no_senders' => true],
393393
'middleware' => [
394394
['id' => 'common_bus.new_middleware', 'arguments' => []],
395395
],
396396
],
397397
'new_bus' => [
398-
'default_middleware' => true,
398+
'default_middleware' => ['enabled' => true, 'allow_no_handlers' => false, 'allow_no_senders' => true],
399399
'middleware' => [
400400
['id' => 'new_bus.middleware', 'arguments' => []],
401401
],
@@ -607,7 +607,7 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor
607607
],
608608
],
609609
'default_bus' => null,
610-
'buses' => ['messenger.bus.default' => ['default_middleware' => true, 'middleware' => []]],
610+
'buses' => ['messenger.bus.default' => ['default_middleware' => ['enabled' => true, 'allow_no_handlers' => false, 'allow_no_senders' => true], 'middleware' => []]],
611611
'reset_on_message' => true,
612612
],
613613
'disallow_search_engine_index' => true,

Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1013,8 +1013,8 @@ public function testMessengerWithMultipleBuses()
10131013
['id' => 'reject_redelivered_message_middleware'],
10141014
['id' => 'dispatch_after_current_bus'],
10151015
['id' => 'failed_message_processing_middleware'],
1016-
['id' => 'send_message'],
1017-
['id' => 'handle_message'],
1016+
['id' => 'send_message', 'arguments' => [true]],
1017+
['id' => 'handle_message', 'arguments' => [false]],
10181018
], $container->getParameter('messenger.bus.commands.middleware'));
10191019
$this->assertTrue($container->has('messenger.bus.events'));
10201020
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
@@ -1024,8 +1024,8 @@ public function testMessengerWithMultipleBuses()
10241024
['id' => 'dispatch_after_current_bus'],
10251025
['id' => 'failed_message_processing_middleware'],
10261026
['id' => 'with_factory', 'arguments' => ['foo', true, ['bar' => 'baz']]],
1027-
['id' => 'send_message'],
1028-
['id' => 'handle_message'],
1027+
['id' => 'send_message', 'arguments' => [true]],
1028+
['id' => 'handle_message', 'arguments' => [false]],
10291029
], $container->getParameter('messenger.bus.events.middleware'));
10301030
$this->assertTrue($container->has('messenger.bus.queries'));
10311031
$this->assertSame([], $container->getDefinition('messenger.bus.queries')->getArgument(0));

0 commit comments

Comments
 (0)