Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit61c54c2

Browse files
timiTaonicolas-grekas
authored andcommitted
[Messenger] fix support for abstract handlers
1 parent853743a commit61c54c2

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

‎src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ private function registerHandlers(ContainerBuilder $container, array $busIds)
7979
thrownewRuntimeException(sprintf('Invalid handler service "%s": bus "%s" specified on the tag "%s" does not exist (known ones are: %s).',$serviceId,$tag['bus'],$this->handlerTag,implode(',',$busIds)));
8080
}
8181

82-
$className =$container->getDefinition($serviceId)->getClass();
82+
$className =$this->getServiceClass($container,$serviceId);
8383
$r =$container->getReflectionClass($className);
8484

8585
if (null ===$r) {
@@ -229,7 +229,7 @@ private function registerReceivers(ContainerBuilder $container, array $busIds)
229229
$receiverMapping = [];
230230

231231
foreach ($container->findTaggedServiceIds($this->receiverTag)as$id =>$tags) {
232-
$receiverClass =$container->findDefinition($id)->getClass();
232+
$receiverClass =$this->getServiceClass($container,$id);
233233
if (!is_subclass_of($receiverClass, ReceiverInterface::class)) {
234234
thrownewRuntimeException(sprintf('Invalid receiver "%s": class "%s" must implement interface "%s".',$id,$receiverClass, ReceiverInterface::class));
235235
}
@@ -321,4 +321,19 @@ private function registerBusMiddleware(ContainerBuilder $container, string $busI
321321

322322
$container->getDefinition($busId)->replaceArgument(0,newIteratorArgument($middlewareReferences));
323323
}
324+
325+
privatefunctiongetServiceClass(ContainerBuilder$container,string$serviceId)
326+
{
327+
while (true) {
328+
$definition =$container->findDefinition($serviceId);
329+
330+
if (!$definition->getClass() &&$definitioninstanceof ChildDefinition) {
331+
$serviceId =$definition->getParent();
332+
333+
continue;
334+
}
335+
336+
return$definition->getClass();
337+
}
338+
}
324339
}

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespaceSymfony\Component\Messenger\Tests\DependencyInjection;
1313

1414
usePHPUnit\Framework\TestCase;
15+
useSymfony\Component\DependencyInjection\ChildDefinition;
1516
useSymfony\Component\DependencyInjection\Compiler\ResolveChildDefinitionsPass;
1617
useSymfony\Component\DependencyInjection\Compiler\ResolveClassPass;
1718
useSymfony\Component\DependencyInjection\ContainerBuilder;
@@ -208,6 +209,34 @@ public function testGetClassesAndMethodsAndPrioritiesFromTheSubscriber()
208209
$this->assertSame(PrioritizedHandler::class,$secondHandlerDefinition->getClass());
209210
}
210211

212+
publicfunctiontestRegisterAbstractHandler()
213+
{
214+
$container =$this->getContainerBuilder($messageBusId ='message_bus');
215+
$container->register($messageBusId, MessageBusInterface::class)->addTag('messenger.bus')->setArgument(0, []);
216+
217+
$container
218+
->register(DummyHandler::class, DummyHandler::class)
219+
->setAbstract(true);
220+
221+
$container
222+
->setDefinition($abstractDirectChildId ='direct_child',newChildDefinition(DummyHandler::class))
223+
->setAbstract(true);
224+
225+
$container
226+
->setDefinition($abstractHandlerId ='child',newChildDefinition($abstractDirectChildId))
227+
->addTag('messenger.message_handler');
228+
229+
(newMessengerPass())->process($container);
230+
231+
$messageHandlerMapping =$container->getDefinition($messageBusId.'.messenger.handlers_locator')->getArgument(0);
232+
$this->assertHandlerDescriptor(
233+
$container,
234+
$messageHandlerMapping,
235+
DummyMessage::class,
236+
[$abstractHandlerId]
237+
);
238+
}
239+
211240
/**
212241
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
213242
* @expectedExceptionMessage Invalid service "NonExistentHandlerClass": class "NonExistentHandlerClass" does not exist.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp