diff --git a/src/Maker/MakeMessage.php b/src/Maker/MakeMessage.php index 74fc1e692..96a11bf9e 100644 --- a/src/Maker/MakeMessage.php +++ b/src/Maker/MakeMessage.php @@ -21,6 +21,7 @@ use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Messenger\Attribute\AsMessage; use Symfony\Component\Messenger\Attribute\AsMessageHandler; use Symfony\Component\Messenger\MessageBusInterface; @@ -86,6 +87,8 @@ public function interact(InputInterface $input, ConsoleStyle $io, Command $comma public function generate(InputInterface $input, ConsoleStyle $io, Generator $generator): void { + $chosenTransport = $input->getArgument('chosen-transport'); + $messageClassNameDetails = $generator->createClassNameDetails( $input->getArgument('name'), 'Message\\' @@ -97,9 +100,20 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen 'Handler' ); + $useStatements = new UseStatementGenerator([]); + + /* @legacy remove when AsMessage is always available */ + if ($chosenTransport && class_exists(AsMessage::class)) { + $useStatements->addUseStatement(AsMessage::class); + } + $generator->generateClass( $messageClassNameDetails->getFullName(), - 'message/Message.tpl.php' + 'message/Message.tpl.php', + [ + 'use_statements' => $useStatements, + 'transport' => class_exists(AsMessage::class) ? $chosenTransport : null, + ] ); $useStatements = new UseStatementGenerator([ @@ -116,7 +130,8 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen ] ); - if (null !== $chosenTransport = $input->getArgument('chosen-transport')) { + /* @legacy remove when AsMessage is always available */ + if ($chosenTransport && !class_exists(AsMessage::class)) { $this->updateMessengerConfig($generator, $chosenTransport, $messageClassNameDetails->getFullName()); } diff --git a/templates/message/Message.tpl.php b/templates/message/Message.tpl.php index 358acc279..a4f30f66b 100644 --- a/templates/message/Message.tpl.php +++ b/templates/message/Message.tpl.php @@ -2,6 +2,9 @@ namespace ; + + +#[AsMessage('')] final class { /* diff --git a/tests/Maker/MakeMessageTest.php b/tests/Maker/MakeMessageTest.php index 0fa8dd95e..efb691cfe 100644 --- a/tests/Maker/MakeMessageTest.php +++ b/tests/Maker/MakeMessageTest.php @@ -15,6 +15,7 @@ use Symfony\Bundle\MakerBundle\Test\MakerTestCase; use Symfony\Bundle\MakerBundle\Test\MakerTestDetails; use Symfony\Bundle\MakerBundle\Test\MakerTestRunner; +use Symfony\Component\Messenger\Attribute\AsMessage; use Symfony\Component\Yaml\Yaml; class MakeMessageTest extends MakerTestCase @@ -63,15 +64,25 @@ public function getTestDetails(): \Generator $this->assertStringContainsString('Success', $output); - $messengerConfig = $runner->readYaml('config/packages/messenger.yaml'); - $this->assertArrayHasKey('routing', $messengerConfig['framework']['messenger']); - $this->assertArrayHasKey('App\Message\SendWelcomeEmail', $messengerConfig['framework']['messenger']['routing']); - $this->assertSame( - 'async', - $messengerConfig['framework']['messenger']['routing']['App\Message\SendWelcomeEmail'] - ); - $this->runMessageTest($runner, 'it_generates_message_with_transport.php'); + + $messageContents = file_get_contents($runner->getPath('src/Message/SendWelcomeEmail.php')); + + if (!str_contains($messageContents, AsMessage::class)) { + /* @legacy remove when AsMessage is always available */ + $messengerConfig = $runner->readYaml('config/packages/messenger.yaml'); + $this->assertArrayHasKey('routing', $messengerConfig['framework']['messenger']); + $this->assertArrayHasKey('App\Message\SendWelcomeEmail', $messengerConfig['framework']['messenger']['routing']); + $this->assertSame( + 'async', + $messengerConfig['framework']['messenger']['routing']['App\Message\SendWelcomeEmail'] + ); + + return; + } + + $this->assertStringContainsString(AsMessage::class, $messageContents); + $this->assertStringContainsString("#[AsMessage('async')]", $messageContents); }), ]; @@ -86,10 +97,13 @@ public function getTestDetails(): \Generator $this->assertStringContainsString('Success', $output); + $this->runMessageTest($runner, 'it_generates_message_with_transport.php'); + $messengerConfig = $runner->readYaml('config/packages/messenger.yaml'); $this->assertArrayNotHasKey('routing', $messengerConfig['framework']['messenger']); - $this->runMessageTest($runner, 'it_generates_message_with_transport.php'); + $messageContents = file_get_contents($runner->getPath('src/Message/SendWelcomeEmail.php')); + $this->assertStringNotContainsString(AsMessage::class, $messageContents); }), ]; }