Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit fa653b8

Browse files
[Messenger] remove AllowNoHandlerMiddleware in favor of a constructor argument on HandleMessageMiddleware
1 parent 9aaec94 commit fa653b8

File tree

15 files changed

+40
-122
lines changed

15 files changed

+40
-122
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,7 +1081,7 @@ function ($a) {
10811081
->arrayNode('buses')
10821082
->defaultValue(array('messenger.bus.default' => array('default_middleware' => true, 'middleware' => array())))
10831083
->useAttributeAsKey('name')
1084-
->prototype('array')
1084+
->arrayPrototype()
10851085
->addDefaultsIfNotSet()
10861086
->children()
10871087
->booleanNode('default_middleware')->defaultTrue()->end()
@@ -1093,7 +1093,7 @@ function ($a) {
10931093
})
10941094
->end()
10951095
->defaultValue(array())
1096-
->prototype('array')
1096+
->arrayPrototype()
10971097
->beforeNormalization()
10981098
->always()
10991099
->then(function ($middleware): array {

src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@
2525
</service>
2626

2727
<!-- Middleware -->
28-
<service id="messenger.middleware.allow_no_handler" class="Symfony\Component\Messenger\Middleware\AllowNoHandlerMiddleware" abstract="true" />
2928
<service id="messenger.middleware.call_message_handler" class="Symfony\Component\Messenger\Middleware\HandleMessageMiddleware" abstract="true">
3029
<argument /> <!-- Bus handler resolver -->
30+
<argument>false</argument> <!-- Allow no handlers -->
3131
</service>
3232

3333
<service id="messenger.middleware.validation" class="Symfony\Component\Messenger\Middleware\ValidationMiddleware" abstract="true">

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_buses.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,12 @@
88
'messenger.bus.events' => array(
99
'middleware' => array(
1010
array('with_factory' => array('foo', true, array('bar' => 'baz'))),
11-
'allow_no_handler',
1211
),
1312
),
1413
'messenger.bus.queries' => array(
1514
'default_middleware' => false,
1615
'middleware' => array(
1716
'route_messages',
18-
'allow_no_handler',
1917
'call_message_handler',
2018
),
2119
),

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_buses.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@
1616
<framework:bar>baz</framework:bar>
1717
</framework:argument>
1818
</framework:middleware>
19-
<framework:middleware id="allow_no_handler" />
2019
</framework:bus>
2120
<framework:bus name="messenger.bus.queries" default-middleware="false">
2221
<framework:middleware id="route_messages" />
23-
<framework:middleware id="allow_no_handler" />
2422
<framework:middleware id="call_message_handler" />
2523
</framework:bus>
2624
</framework:messenger>

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_buses.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@ framework:
66
messenger.bus.events:
77
middleware:
88
- with_factory: [foo, true, { bar: baz }]
9-
- "allow_no_handler"
109
messenger.bus.queries:
1110
default_middleware: false
1211
middleware:
1312
- "route_messages"
14-
- "allow_no_handler"
1513
- "call_message_handler"

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -627,15 +627,13 @@ public function testMessengerWithMultipleBuses()
627627
$this->assertEquals(array(
628628
array('id' => 'logging'),
629629
array('id' => 'with_factory', 'arguments' => array('foo', true, array('bar' => 'baz'))),
630-
array('id' => 'allow_no_handler', 'arguments' => array()),
631630
array('id' => 'route_messages'),
632631
array('id' => 'call_message_handler'),
633632
), $container->getParameter('messenger.bus.events.middleware'));
634633
$this->assertTrue($container->has('messenger.bus.queries'));
635634
$this->assertSame(array(), $container->getDefinition('messenger.bus.queries')->getArgument(0));
636635
$this->assertEquals(array(
637636
array('id' => 'route_messages', 'arguments' => array()),
638-
array('id' => 'allow_no_handler', 'arguments' => array()),
639637
array('id' => 'call_message_handler', 'arguments' => array()),
640638
), $container->getParameter('messenger.bus.queries.middleware'));
641639

src/Symfony/Component/Messenger/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ CHANGELOG
3333
* `HandlerLocatorInterface::resolve()` has been replaced by `getHandler(Envelope $envelope)`
3434
* `SenderLocatorInterface::getSenderForMessage()` has been replaced by `getSender(Envelope $envelope)`
3535
* `SenderInterface::send()` returns `void`
36+
* `AllowNoHandlerMiddleware` has removed in favor of a new constructor argument on `HandleMessageMiddleware`
37+
* `HandlerLocatorInterface::getHandler()` now returns `?callable` and shouldn't throw when no handlers are found
3638

3739
4.1.0
3840
-----

src/Symfony/Component/Messenger/Handler/Locator/AbstractHandlerLocator.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
namespace Symfony\Component\Messenger\Handler\Locator;
1313

1414
use Symfony\Component\Messenger\Envelope;
15-
use Symfony\Component\Messenger\Exception\NoHandlerForMessageException;
1615

1716
/**
1817
* @author Miha Vrhovnik <[email protected]>
@@ -22,7 +21,7 @@
2221
*/
2322
abstract class AbstractHandlerLocator implements HandlerLocatorInterface
2423
{
25-
public function getHandler(Envelope $envelope): callable
24+
public function getHandler(Envelope $envelope): ?callable
2625
{
2726
$class = \get_class($envelope->getMessage());
2827

@@ -42,7 +41,7 @@ public function getHandler(Envelope $envelope): callable
4241
}
4342
}
4443

45-
throw new NoHandlerForMessageException(sprintf('No handler for message "%s".', $class));
44+
return null;
4645
}
4746

4847
abstract protected function getHandlerByName(string $name): ?callable;

src/Symfony/Component/Messenger/Handler/Locator/HandlerLocatorInterface.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ interface HandlerLocatorInterface
2121
{
2222
/**
2323
* Returns the handler for the given message.
24-
*
25-
* @throws NoHandlerForMessageException When no handler is found
2624
*/
27-
public function getHandler(Envelope $envelope): callable;
25+
public function getHandler(Envelope $envelope): ?callable;
2826
}

src/Symfony/Component/Messenger/Middleware/AllowNoHandlerMiddleware.php

Lines changed: 0 additions & 33 deletions
This file was deleted.

src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Component\Messenger\Middleware;
1313

1414
use Symfony\Component\Messenger\Envelope;
15+
use Symfony\Component\Messenger\Exception\NoHandlerForMessageException;
1516
use Symfony\Component\Messenger\Handler\Locator\HandlerLocatorInterface;
1617

1718
/**
@@ -20,19 +21,26 @@
2021
class HandleMessageMiddleware implements MiddlewareInterface
2122
{
2223
private $messageHandlerLocator;
24+
private $allowNoHandlers;
2325

24-
public function __construct(HandlerLocatorInterface $messageHandlerLocator)
26+
public function __construct(HandlerLocatorInterface $messageHandlerLocator, bool $allowNoHandlers = false)
2527
{
2628
$this->messageHandlerLocator = $messageHandlerLocator;
29+
$this->allowNoHandlers = $allowNoHandlers;
2730
}
2831

2932
/**
3033
* {@inheritdoc}
34+
*
35+
* @throws NoHandlerForMessageException When no handler is found and $allowNoHandlers is false
3136
*/
3237
public function handle(Envelope $envelope, callable $next): void
3338
{
34-
$handler = $this->messageHandlerLocator->getHandler($envelope);
35-
$handler($envelope->getMessage());
36-
$next($envelope);
39+
if (null !== $handler = $this->messageHandlerLocator->getHandler($envelope)) {
40+
$handler($envelope->getMessage());
41+
$next($envelope);
42+
} elseif (!$this->allowNoHandlers) {
43+
throw new NoHandlerForMessageException(sprintf('No handler for message "%s".', \get_class($envelope->getMessage())));
44+
}
3745
}
3846
}

src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
2828
use Symfony\Component\Messenger\Handler\MessageSubscriberInterface;
2929
use Symfony\Component\Messenger\MessageBusInterface;
30-
use Symfony\Component\Messenger\Middleware\AllowNoHandlerMiddleware;
3130
use Symfony\Component\Messenger\Middleware\HandleMessageMiddleware;
3231
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
3332
use Symfony\Component\Messenger\Tests\Fixtures\DummyCommand;
@@ -493,7 +492,6 @@ public function testRegistersTraceableBusesToCollector()
493492
public function testRegistersMiddlewareFromServices()
494493
{
495494
$container = $this->getContainerBuilder($fooBusId = 'messenger.bus.foo');
496-
$container->register('messenger.middleware.allow_no_handler', AllowNoHandlerMiddleware::class)->setAbstract(true);
497495
$container->register('middleware_with_factory', UselessMiddleware::class)->addArgument('some_default')->setAbstract(true);
498496
$container->register('middleware_with_factory_using_default', UselessMiddleware::class)->addArgument('some_default')->setAbstract(true);
499497
$container->register(UselessMiddleware::class, UselessMiddleware::class);
@@ -502,14 +500,11 @@ public function testRegistersMiddlewareFromServices()
502500
array('id' => UselessMiddleware::class),
503501
array('id' => 'middleware_with_factory', 'arguments' => array('foo', 'bar')),
504502
array('id' => 'middleware_with_factory_using_default'),
505-
array('id' => 'allow_no_handler'),
506503
));
507504

508505
(new MessengerPass())->process($container);
509506
(new ResolveChildDefinitionsPass())->process($container);
510507

511-
$this->assertTrue($container->hasDefinition($childMiddlewareId = $fooBusId.'.middleware.allow_no_handler'));
512-
513508
$this->assertTrue($container->hasDefinition($factoryChildMiddlewareId = $fooBusId.'.middleware.middleware_with_factory'));
514509
$this->assertEquals(
515510
array('foo', 'bar'),
@@ -528,7 +523,6 @@ public function testRegistersMiddlewareFromServices()
528523
new Reference(UselessMiddleware::class),
529524
new Reference($factoryChildMiddlewareId),
530525
new Reference($factoryWithDefaultChildMiddlewareId),
531-
new Reference($childMiddlewareId),
532526
), $container->getDefinition($fooBusId)->getArgument(0));
533527
$this->assertFalse($container->hasParameter($middlewareParameter));
534528
}

src/Symfony/Component/Messenger/Tests/Handler/Locator/ContainerHandlerLocatorTest.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,10 @@ public function testItLocatesHandlerUsingTheMessageClass()
2525
$this->assertSame($handler, $resolvedHandler);
2626
}
2727

28-
/**
29-
* @expectedException \Symfony\Component\Messenger\Exception\NoHandlerForMessageException
30-
* @expectedExceptionMessage No handler for message "Symfony\Component\Messenger\Tests\Fixtures\DummyMessage"
31-
*/
32-
public function testThrowsNoHandlerException()
28+
public function testNoHandlersReturnsNull()
3329
{
3430
$locator = new ContainerHandlerLocator(new Container());
35-
$locator->getHandler(new Envelope(new DummyMessage('Hey')));
31+
$this->assertNull($locator->getHandler(new Envelope(new DummyMessage('Hey'))));
3632
}
3733

3834
public function testGetHandlerViaInterface()

src/Symfony/Component/Messenger/Tests/Middleware/AllowNoHandlerMiddlewareTest.php

Lines changed: 0 additions & 56 deletions
This file was deleted.

src/Symfony/Component/Messenger/Tests/Middleware/HandleMessageMiddlewareTest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,22 @@ public function testItCallsTheHandlerAndNextMiddleware()
3737

3838
$middleware->handle($envelope, $next);
3939
}
40+
41+
/**
42+
* @expectedException \Symfony\Component\Messenger\Exception\NoHandlerForMessageException
43+
* @expectedExceptionMessage No handler for message "Symfony\Component\Messenger\Tests\Fixtures\DummyMessage"
44+
*/
45+
public function testThrowsNoHandlerException()
46+
{
47+
$middleware = new HandleMessageMiddleware(new HandlerLocator(array()));
48+
49+
$middleware->handle(new Envelope(new DummyMessage('Hey')), function () {});
50+
}
51+
52+
public function testAllowNoHandlers()
53+
{
54+
$middleware = new HandleMessageMiddleware(new HandlerLocator(array()), true);
55+
56+
$this->assertNull($middleware->handle(new Envelope(new DummyMessage('Hey')), function () {}));
57+
}
4058
}

0 commit comments

Comments
 (0)