Skip to content

Commit d1309e7

Browse files
committed
feature #574 New Messenger Middleware Maker command (zairigimad)
This PR was squashed before being merged into the 1.0-dev branch (closes #574). Discussion ---------- New Messenger Middleware Maker command New Command to generate Middleware <img width="591" alt="capture" src="https://user-images.githubusercontent.com/9056839/77856793-d73b3b00-71f9-11ea-9c7a-a3c72980d7b4.png"> generated code : <details> <summary>CustomMiddleware</summary> ```php <?php namespace App\Middleware; use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\Middleware\MiddlewareInterface; use Symfony\Component\Messenger\Middleware\StackInterface; final class CustomMiddleware implements MiddlewareInterface { public function handle(Envelope $envelope, StackInterface $stack): Envelope { // ... return $stack->next()->handle($envelope, $stack); } } ``` </details> Commits ------- a250102 New Messenger Middleware Maker command
2 parents 6c7cfe6 + a250102 commit d1309e7

File tree

5 files changed

+132
-0
lines changed

5 files changed

+132
-0
lines changed

src/Maker/MakeMessengerMiddleware.php

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony MakerBundle package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bundle\MakerBundle\Maker;
13+
14+
use Symfony\Bundle\MakerBundle\ConsoleStyle;
15+
use Symfony\Bundle\MakerBundle\DependencyBuilder;
16+
use Symfony\Bundle\MakerBundle\Generator;
17+
use Symfony\Bundle\MakerBundle\InputConfiguration;
18+
use Symfony\Component\Console\Command\Command;
19+
use Symfony\Component\Console\Input\InputArgument;
20+
use Symfony\Component\Console\Input\InputInterface;
21+
use Symfony\Component\Messenger\MessageBusInterface;
22+
23+
/**
24+
* @author Imad ZAIRIG <[email protected]>
25+
*
26+
* @internal
27+
*/
28+
final class MakeMessengerMiddleware extends AbstractMaker
29+
{
30+
public static function getCommandName(): string
31+
{
32+
return 'make:messenger-middleware';
33+
}
34+
35+
public function configureCommand(Command $command, InputConfiguration $inputConfig)
36+
{
37+
$command
38+
->setDescription('Creates a new messenger middleware')
39+
->addArgument('name', InputArgument::OPTIONAL, 'The name of the middleware class (e.g. <fg=yellow>CustomMiddleware</>)')
40+
->setHelp(file_get_contents(__DIR__.'/../Resources/help/MakeMessage.txt'));
41+
}
42+
43+
public function generate(InputInterface $input, ConsoleStyle $io, Generator $generator)
44+
{
45+
$middlewareClassNameDetails = $generator->createClassNameDetails(
46+
$input->getArgument('name'),
47+
'Middleware\\',
48+
'Middleware'
49+
);
50+
51+
$generator->generateClass(
52+
$middlewareClassNameDetails->getFullName(),
53+
'middleware/Middleware.tpl.php'
54+
);
55+
56+
$generator->writeChanges();
57+
58+
$this->writeSuccessMessage($io);
59+
60+
$io->text([
61+
'Next:',
62+
sprintf('- Open the <info>%s</info> class and add the code you need', $middlewareClassNameDetails->getFullName()),
63+
'- Add the middleware to your <info>config/packages/messenger.yaml</info> file',
64+
'Find the documentation at <fg=yellow>https://symfony.com/doc/current/messenger.html#middleware</>',
65+
]);
66+
}
67+
68+
public function configureDependencies(DependencyBuilder $dependencies)
69+
{
70+
$dependencies->addClassDependency(
71+
MessageBusInterface::class,
72+
'messenger'
73+
);
74+
}
75+
}

src/Resources/config/makers.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@
5757
<tag name="maker.command" />
5858
</service>
5959

60+
<service id="maker.maker.make_messenger_middleware" class="Symfony\Bundle\MakerBundle\Maker\MakeMessengerMiddleware">
61+
<tag name="maker.command" />
62+
</service>
63+
6064
<service id="maker.maker.make_registration_form" class="Symfony\Bundle\MakerBundle\Maker\MakeRegistrationForm">
6165
<argument type="service" id="maker.file_manager" />
6266
<argument type="service" id="maker.renderer.form_type_renderer" />

src/Resources/help/MakeMiddleware.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
The <info>%command.name%</info> command generates a new Middleware class.
2+
3+
<info>php %command.full_name% CustomMiddleware</info>
4+
5+
If the argument is missing, the command will ask for the message class interactively.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?= "<?php\n" ?>
2+
3+
namespace <?= $namespace; ?>;
4+
5+
use Symfony\Component\Messenger\Envelope;
6+
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
7+
use Symfony\Component\Messenger\Middleware\StackInterface;
8+
9+
final class <?= $class_name; ?> implements MiddlewareInterface
10+
{
11+
public function handle(Envelope $envelope, StackInterface $stack): Envelope
12+
{
13+
// ...
14+
return $stack->next()->handle($envelope, $stack);
15+
}
16+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony MakerBundle package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bundle\MakerBundle\Tests\Maker;
13+
14+
use Symfony\Bundle\MakerBundle\Maker\MakeMessengerMiddleware;
15+
use Symfony\Bundle\MakerBundle\Test\MakerTestCase;
16+
use Symfony\Bundle\MakerBundle\Test\MakerTestDetails;
17+
18+
class MakeMessengerMiddlewareTest extends MakerTestCase
19+
{
20+
public function getTestDetails()
21+
{
22+
yield 'messenger_middleware' => [MakerTestDetails::createTest(
23+
$this->getMakerInstance(MakeMessengerMiddleware::class),
24+
[
25+
// middleware name
26+
'CustomMiddleware',
27+
])->assert(function (string $output, string $directory) {
28+
$this->assertFileExists($directory.'/src/Middleware/CustomMiddleware.php');
29+
}),
30+
];
31+
}
32+
}

0 commit comments

Comments
 (0)