12
12
namespace Symfony \Component \Messenger \Transport \Sender ;
13
13
14
14
use Psr \Container \ContainerInterface ;
15
- use Symfony \Component \Messenger \Attribute \Senders ;
15
+ use Symfony \Component \Messenger \Attribute \Transport ;
16
16
use Symfony \Component \Messenger \Envelope ;
17
17
use Symfony \Component \Messenger \Exception \RuntimeException ;
18
18
use Symfony \Component \Messenger \Handler \HandlersLocator ;
@@ -44,16 +44,20 @@ public function getSenders(Envelope $envelope): iterable
44
44
{
45
45
$ senderAliases = [];
46
46
47
- if (\PHP_VERSION_ID >= 80000 ) {
48
- $ senderAliases = $ this ->getSendersFromAttributes ($ envelope );
49
- }
50
-
51
47
foreach (HandlersLocator::listTypes ($ envelope ) as $ type ) {
52
48
foreach ($ this ->sendersMap [$ type ] ?? [] as $ senderAlias ) {
53
49
$ senderAliases [] = $ senderAlias ;
54
50
}
55
51
}
56
52
53
+ if (\PHP_VERSION_ID >= 80000 ) {
54
+ $ senderAliasesFromAttributes = $ this ->getSendersFromAttributes ($ envelope );
55
+
56
+ if (!empty ($ senderAliasesFromAttributes )) {
57
+ $ senderAliases = $ senderAliasesFromAttributes ;
58
+ }
59
+ }
60
+
57
61
$ senderAliases = array_unique ($ senderAliases );
58
62
59
63
foreach ($ senderAliases as $ senderAlias ) {
@@ -71,21 +75,24 @@ public function getSenders(Envelope $envelope): iterable
71
75
*/
72
76
private function getSendersFromAttributes (Envelope $ envelope ): array
73
77
{
74
- $ messageClass = \get_class ($ envelope ->getMessage ());
75
-
76
- try {
77
- $ reflectionClass = new \ReflectionClass ($ messageClass );
78
- } catch (\ReflectionException $ e ) {
79
- return [];
80
- }
81
-
82
- $ attributes = $ reflectionClass ->getAttributes (Senders::class);
83
-
84
78
$ senders = [];
85
- foreach ($ attributes as $ attribute ) {
86
- /** @var Senders $attributeInstance */
87
- $ attributeInstance = $ attribute ->newInstance ();
88
- $ senders = array_merge ($ senders , $ attributeInstance ->senders );
79
+
80
+ foreach (HandlersLocator::listTypes ($ envelope ) as $ type ) {
81
+ if (class_exists ($ type ) || interface_exists ($ type )) {
82
+ try {
83
+ $ reflectionClass = new \ReflectionClass ($ type );
84
+ } catch (\ReflectionException $ e ) {
85
+ continue ;
86
+ }
87
+
88
+ $ attributes = $ reflectionClass ->getAttributes (Transport::class);
89
+
90
+ foreach ($ attributes as $ attribute ) {
91
+ /** @var Transport $attributeInstance */
92
+ $ attributeInstance = $ attribute ->newInstance ();
93
+ $ senders [] = $ attributeInstance ->name ;
94
+ }
95
+ }
89
96
}
90
97
91
98
return $ senders ;
0 commit comments