* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Bundle\MakerBundle\Maker; use Symfony\Bundle\MakerBundle\ConsoleStyle; use Symfony\Bundle\MakerBundle\DependencyBuilder; use Symfony\Bundle\MakerBundle\Generator; use Symfony\Bundle\MakerBundle\InputConfiguration; use Symfony\Bundle\MakerBundle\Util\UseStatementGenerator; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Messenger\Middleware\MiddlewareInterface; use Symfony\Component\Messenger\Middleware\StackInterface; /** * @author Imad ZAIRIG * * @internal */ final class MakeMessengerMiddleware extends AbstractMaker { public static function getCommandName(): string { return 'make:messenger-middleware'; } public static function getCommandDescription(): string { return 'Create a new messenger middleware'; } public function configureCommand(Command $command, InputConfiguration $inputConfig): void { $command ->addArgument('name', InputArgument::OPTIONAL, 'The name of the middleware class (e.g. CustomMiddleware)') ->setHelp($this->getHelpFileContents('MakeMessage.txt')) ; } public function generate(InputInterface $input, ConsoleStyle $io, Generator $generator): void { $middlewareClassNameDetails = $generator->createClassNameDetails( $input->getArgument('name'), 'Middleware\\', 'Middleware' ); $useStatements = new UseStatementGenerator([ Envelope::class, MiddlewareInterface::class, StackInterface::class, ]); $generator->generateClass( $middlewareClassNameDetails->getFullName(), 'middleware/Middleware.tpl.php', [ 'use_statements' => $useStatements, ] ); $generator->writeChanges(); $this->writeSuccessMessage($io); $io->text([ 'Next:', \sprintf('- Open the %s class and add the code you need', $middlewareClassNameDetails->getFullName()), '- Add the middleware to your config/packages/messenger.yaml file', 'Find the documentation at https://symfony.com/doc/current/messenger.html#middleware', ]); } public function configureDependencies(DependencyBuilder $dependencies): void { $dependencies->addClassDependency( MessageBusInterface::class, 'messenger' ); } }