Skip to content

Commit f178860

Browse files
authored
Bus restricting with Interfaces
Proposed more flexible way to restrict handlers with buses - use interfaces for this.
1 parent 5e9aa31 commit f178860

File tree

1 file changed

+32
-29
lines changed

1 file changed

+32
-29
lines changed

messenger/multiple_buses.rst

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -161,19 +161,13 @@ the correct tag:
161161
# config/services.yaml
162162
163163
# put this after the "App\" line that registers all your services
164-
command_handlers:
165-
namespace: App\MessageHandler\
166-
resource: '%kernel.project_dir%/src/MessageHandler/*CommandHandler.php'
167-
autoconfigure: false
168-
tags:
169-
- { name: messenger.message_handler, bus: command.bus }
170-
171-
query_handlers:
172-
namespace: App\MessageHandler\
173-
resource: '%kernel.project_dir%/src/MessageHandler/*QueryHandler.php'
174-
autoconfigure: false
175-
tags:
176-
- { name: messenger.message_handler, bus: query.bus }
164+
_instanceof:
165+
App\MessageHandler\CommandHandlerInterface:
166+
tags:
167+
- { name: messenger.message_handler, bus: command.bus }
168+
App\MessageHandler\QueryHandlerInterface:
169+
tags:
170+
- { name: messenger.message_handler, bus: query.bus }
177171
178172
.. code-block:: xml
179173
@@ -186,31 +180,40 @@ the correct tag:
186180
187181
<services>
188182
<!-- command handlers -->
189-
<prototype namespace="App\MessageHandler\" resource="%kernel.project_dir%/src/MessageHandler/*CommandHandler.php" autoconfigure="false">
190-
<tag name="messenger.message_handler" bus="command.bus"/>
191-
</service>
183+
<instanceof id="App\MessageHandler\CommandHandlerInterface" autowire="true">
184+
<tag name="messenger.message_handler", bus="command.bus"/>
185+
</instanceof>
192186
<!-- query handlers -->
193-
<prototype namespace="App\MessageHandler\" resource="%kernel.project_dir%/src/MessageHandler/*QueryHandler.php" autoconfigure="false">
194-
<tag name="messenger.message_handler" bus="query.bus"/>
195-
</service>
187+
<instanceof id="App\MessageHandler\QueryHandlerInterface" autowire="true">
188+
<tag name="messenger.message_handler", bus="query.bus"/>
189+
</instanceof>
196190
</services>
197191
</container>
198192
199193
.. code-block:: php
200194
201195
// config/services.php
196+
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
202197
203-
// Command handlers
204-
$container->services()
205-
->load('App\MessageHandler\\', '%kernel.project_dir%/src/MessageHandler/*CommandHandler.php')
206-
->autoconfigure(false)
207-
->tag('messenger.message_handler', ['bus' => 'command.bus']);
198+
use App\MessageHandler\CommandHandlerInterface;
199+
use App\MessageHandler\QueryHandlerInterface;
208200
209-
// Query handlers
210-
$container->services()
211-
->load('App\MessageHandler\\', '%kernel.project_dir%/src/MessageHandler/*QueryHandler.php')
212-
->autoconfigure(false)
213-
->tag('messenger.message_handler', ['bus' => 'query.bus']);
201+
return function(ContainerConfigurator $configurator) {
202+
$services = $configurator->services();
203+
204+
// Command handlers
205+
$services
206+
->instanceof(CommandHandlerInterface::class)
207+
->tag('messenger.message_handler', ['bus' => 'command.bus']);
208+
209+
// Query handlers
210+
$services
211+
->instanceof(QueryHandlerInterface::class)
212+
->tag('messenger.message_handler', ['bus' => 'query.bus']);
213+
214+
};
215+
216+
From now any handler implementing ``CommandHandlerInterface`` will be automatically restricted to ``command.bus`` bus. The same is true for ``query.bus`` bus - just implement ``QueryHandlerInterface`` interface.
214217

215218
Debugging the Buses
216219
-------------------

0 commit comments

Comments
 (0)