Skip to content

Commit 8a3de03

Browse files
committed
feature #940 [make:subscriber] Improve MakeSubscriber to use KernelEvents constant instead hardcoded event (bdaler, jrushlow)
This PR was merged into the 1.0-dev branch. Discussion ---------- [make:subscriber] Improve MakeSubscriber to use KernelEvents constant instead hardcoded event Use KernelEvents constant instead hardcoded event type in MakeSubscriber. #744 Commits ------- f724487 inline extra method 4556854 custom event class 187e0d9 fix assertion 3fa4360 add test case 416e5f4 slight refactoring 648db48 strict typing 37aec4e php-cs-fixer it up 54f3891 use generated use statements 9a397e6 Style fix. 0341a50 Use KernelEvents constant instead hardcoded event type in MakeSubscriber.
2 parents 63c52a1 + f724487 commit 8a3de03

File tree

2 files changed

+50
-2
lines changed

2 files changed

+50
-2
lines changed

src/Maker/MakeSubscriber.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
use Symfony\Component\Console\Input\InputInterface;
2525
use Symfony\Component\Console\Question\Question;
2626
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
27+
use Symfony\Component\HttpKernel\KernelEvents;
2728

2829
/**
2930
* @author Javier Eguiluz <[email protected]>
@@ -87,6 +88,14 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen
8788
EventSubscriberInterface::class,
8889
]);
8990

91+
// Determine if we use a KernelEvents::CONSTANT or custom even name
92+
if (null !== ($eventConstant = $this->getEventConstant($event))) {
93+
$useStatements->addUseStatement(KernelEvents::class);
94+
$eventName = $eventConstant;
95+
} else {
96+
$eventName = class_exists($event) ? sprintf('%s::class', $eventClassName) : sprintf('\'%s\'', $event);
97+
}
98+
9099
if (null !== $eventFullClassName) {
91100
$useStatements->addUseStatement($eventFullClassName);
92101
}
@@ -96,7 +105,7 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen
96105
'event/Subscriber.tpl.php',
97106
[
98107
'use_statements' => $useStatements,
99-
'event' => class_exists($event) ? sprintf('%s::class', $eventClassName) : sprintf('\'%s\'', $event),
108+
'event' => $eventName,
100109
'event_arg' => $eventClassName ? sprintf('%s $event', $eventClassName) : '$event',
101110
'method_name' => class_exists($event) ? Str::asEventMethod($eventClassName) : Str::asEventMethod($event),
102111
]
@@ -115,4 +124,15 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen
115124
public function configureDependencies(DependencyBuilder $dependencies): void
116125
{
117126
}
127+
128+
private function getEventConstant(string $event): ?string
129+
{
130+
$constants = (new \ReflectionClass(KernelEvents::class))->getConstants();
131+
132+
if (false !== ($name = array_search($event, $constants, true))) {
133+
return sprintf('KernelEvents::%s', $name);
134+
}
135+
136+
return null;
137+
}
118138
}

tests/Maker/MakeSubscriberTest.php

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ protected function getMakerClass(): string
2222
return MakeSubscriber::class;
2323
}
2424

25-
public function getTestDetails()
25+
public function getTestDetails(): \Generator
2626
{
2727
yield 'it_makes_subscriber_for_known_event' => [$this->createMakerTest()
2828
->run(function (MakerTestRunner $runner) {
@@ -34,6 +34,29 @@ public function getTestDetails()
3434
'kernel.request',
3535
]
3636
);
37+
38+
self::assertStringContainsString(
39+
'KernelEvents::REQUEST => \'onKernelRequest\'',
40+
file_get_contents($runner->getPath('src/EventSubscriber/FooBarSubscriber.php'))
41+
);
42+
}),
43+
];
44+
45+
yield 'it_makes_subscriber_for_custom_event_class' => [$this->createMakerTest()
46+
->run(function (MakerTestRunner $runner) {
47+
$runner->runMaker(
48+
[
49+
// subscriber name
50+
'FooBar',
51+
// event name
52+
\Symfony\Bundle\MakerBundle\Generator::class,
53+
]
54+
);
55+
56+
self::assertStringContainsString(
57+
'Generator::class => \'onGenerator\'',
58+
file_get_contents($runner->getPath('src/EventSubscriber/FooBarSubscriber.php'))
59+
);
3760
}),
3861
];
3962

@@ -47,6 +70,11 @@ public function getTestDetails()
4770
'foo.unknown_event',
4871
]
4972
);
73+
74+
self::assertStringContainsString(
75+
'\'foo.unknown_event\' => \'onFooUnknownEvent\',',
76+
file_get_contents($runner->getPath('src/EventSubscriber/FooBarSubscriber.php'))
77+
);
5078
}),
5179
];
5280
}

0 commit comments

Comments
 (0)