Skip to content

Commit d468548

Browse files
committed
feature #1690 [make:message] use AsMessage for routing if available (kbond)
This PR was merged into the 1.x branch. Discussion ---------- [make:message] use `AsMessage` for routing if available The less files a maker touches, the better, IMO. Commits ------- 2ba3eda [make:message] use `AsMessage` for routing if available
2 parents aa37c3c + 2ba3eda commit d468548

File tree

3 files changed

+43
-11
lines changed

3 files changed

+43
-11
lines changed

src/Maker/MakeMessage.php

+17-2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use Symfony\Component\Console\Command\Command;
2222
use Symfony\Component\Console\Input\InputArgument;
2323
use Symfony\Component\Console\Input\InputInterface;
24+
use Symfony\Component\Messenger\Attribute\AsMessage;
2425
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
2526
use Symfony\Component\Messenger\MessageBusInterface;
2627

@@ -86,6 +87,8 @@ public function interact(InputInterface $input, ConsoleStyle $io, Command $comma
8687

8788
public function generate(InputInterface $input, ConsoleStyle $io, Generator $generator): void
8889
{
90+
$chosenTransport = $input->getArgument('chosen-transport');
91+
8992
$messageClassNameDetails = $generator->createClassNameDetails(
9093
$input->getArgument('name'),
9194
'Message\\'
@@ -97,9 +100,20 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen
97100
'Handler'
98101
);
99102

103+
$useStatements = new UseStatementGenerator([]);
104+
105+
/* @legacy remove when AsMessage is always available */
106+
if ($chosenTransport && class_exists(AsMessage::class)) {
107+
$useStatements->addUseStatement(AsMessage::class);
108+
}
109+
100110
$generator->generateClass(
101111
$messageClassNameDetails->getFullName(),
102-
'message/Message.tpl.php'
112+
'message/Message.tpl.php',
113+
[
114+
'use_statements' => $useStatements,
115+
'transport' => class_exists(AsMessage::class) ? $chosenTransport : null,
116+
]
103117
);
104118

105119
$useStatements = new UseStatementGenerator([
@@ -116,7 +130,8 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen
116130
]
117131
);
118132

119-
if (null !== $chosenTransport = $input->getArgument('chosen-transport')) {
133+
/* @legacy remove when AsMessage is always available */
134+
if ($chosenTransport && !class_exists(AsMessage::class)) {
120135
$this->updateMessengerConfig($generator, $chosenTransport, $messageClassNameDetails->getFullName());
121136
}
122137

templates/message/Message.tpl.php

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
namespace <?= $namespace; ?>;
44

5+
<?= $use_statements; ?>
6+
7+
<?php if ($transport): ?>#[AsMessage('<?= $transport ?>')]<?= "\n" ?><?php endif ?>
58
final class <?= $class_name."\n" ?>
69
{
710
/*

tests/Maker/MakeMessageTest.php

+23-9
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Bundle\MakerBundle\Test\MakerTestCase;
1616
use Symfony\Bundle\MakerBundle\Test\MakerTestDetails;
1717
use Symfony\Bundle\MakerBundle\Test\MakerTestRunner;
18+
use Symfony\Component\Messenger\Attribute\AsMessage;
1819
use Symfony\Component\Yaml\Yaml;
1920

2021
class MakeMessageTest extends MakerTestCase
@@ -63,15 +64,25 @@ public function getTestDetails(): \Generator
6364

6465
$this->assertStringContainsString('Success', $output);
6566

66-
$messengerConfig = $runner->readYaml('config/packages/messenger.yaml');
67-
$this->assertArrayHasKey('routing', $messengerConfig['framework']['messenger']);
68-
$this->assertArrayHasKey('App\Message\SendWelcomeEmail', $messengerConfig['framework']['messenger']['routing']);
69-
$this->assertSame(
70-
'async',
71-
$messengerConfig['framework']['messenger']['routing']['App\Message\SendWelcomeEmail']
72-
);
73-
7467
$this->runMessageTest($runner, 'it_generates_message_with_transport.php');
68+
69+
$messageContents = file_get_contents($runner->getPath('src/Message/SendWelcomeEmail.php'));
70+
71+
if (!str_contains($messageContents, AsMessage::class)) {
72+
/* @legacy remove when AsMessage is always available */
73+
$messengerConfig = $runner->readYaml('config/packages/messenger.yaml');
74+
$this->assertArrayHasKey('routing', $messengerConfig['framework']['messenger']);
75+
$this->assertArrayHasKey('App\Message\SendWelcomeEmail', $messengerConfig['framework']['messenger']['routing']);
76+
$this->assertSame(
77+
'async',
78+
$messengerConfig['framework']['messenger']['routing']['App\Message\SendWelcomeEmail']
79+
);
80+
81+
return;
82+
}
83+
84+
$this->assertStringContainsString(AsMessage::class, $messageContents);
85+
$this->assertStringContainsString("#[AsMessage('async')]", $messageContents);
7586
}),
7687
];
7788

@@ -86,10 +97,13 @@ public function getTestDetails(): \Generator
8697

8798
$this->assertStringContainsString('Success', $output);
8899

100+
$this->runMessageTest($runner, 'it_generates_message_with_transport.php');
101+
89102
$messengerConfig = $runner->readYaml('config/packages/messenger.yaml');
90103
$this->assertArrayNotHasKey('routing', $messengerConfig['framework']['messenger']);
91104

92-
$this->runMessageTest($runner, 'it_generates_message_with_transport.php');
105+
$messageContents = file_get_contents($runner->getPath('src/Message/SendWelcomeEmail.php'));
106+
$this->assertStringNotContainsString(AsMessage::class, $messageContents);
93107
}),
94108
];
95109
}

0 commit comments

Comments
 (0)