Skip to content

Commit eabe078

Browse files
authored
Merge pull request #498 from stof/better_registration
Modernize the registration of services for extension points
2 parents 7e70649 + bef0003 commit eabe078

File tree

8 files changed

+6
-257
lines changed

8 files changed

+6
-257
lines changed

config/menu.xml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@
2424
</service>
2525

2626
<service id="knp_menu.matcher" class="Knp\Menu\Matcher\Matcher" public="true">
27-
<argument type="collection" />
27+
<argument type="tagged_iterator" tag="knp_menu.voter" />
2828
<tag name="kernel.reset" method="clear" />
2929
</service>
3030

3131
<service id="Knp\Menu\Provider\MenuProviderInterface" alias="knp_menu.menu_provider" public="false"/>
3232

3333
<service id="knp_menu.menu_provider.chain" class="Knp\Menu\Provider\ChainProvider" public="false">
34-
<argument type="collection" />
34+
<argument type="tagged_iterator" tag="knp_menu.provider" />
3535
</service>
3636

3737
<service id="knp_menu.menu_provider.lazy" class="Knp\Menu\Provider\LazyProvider" public="false">
@@ -46,10 +46,8 @@
4646
</service>
4747

4848
<service id="knp_menu.renderer_provider" class="Knp\Menu\Renderer\PsrProvider">
49-
<argument type="service" id="service_container" />
49+
<argument type="tagged_locator" tag="knp_menu.renderer" index-by="alias" />
5050
<argument>%knp_menu.default_renderer%</argument>
51-
<argument type="collection" />
52-
<argument>false</argument>
5351
</service>
5452

5553
<service id="knp_menu.renderer.list" class="Knp\Menu\Renderer\ListRenderer">

src/DependencyInjection/Compiler/AddProvidersPass.php

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22

33
namespace Knp\Bundle\MenuBundle\DependencyInjection\Compiler;
44

5-
use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
65
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
76
use Symfony\Component\DependencyInjection\ContainerBuilder;
8-
use Symfony\Component\DependencyInjection\Reference;
97

108
/**
11-
* This compiler pass registers the providers in the ChainProvider.
9+
* This compiler pass registers the ChainProvider or the only provider as `knp_menu.menu_provider`.
1210
*
1311
* @author Christophe Coevoet <[email protected]>
1412
*
@@ -18,26 +16,16 @@ final class AddProvidersPass implements CompilerPassInterface
1816
{
1917
public function process(ContainerBuilder $container): void
2018
{
21-
if (!$container->hasDefinition('knp_menu.menu_provider.chain')) {
22-
return;
23-
}
24-
2519
$providers = [];
2620
foreach ($container->findTaggedServiceIds('knp_menu.provider') as $id => $tags) {
27-
$providers[] = new Reference($id);
21+
$providers[] = $id;
2822
}
2923

3024
if (1 === \count($providers)) {
3125
// Use an alias instead of wrapping it in the ChainProvider for performances
3226
// when using only one (the default case as the bundle defines one provider)
33-
$container->setAlias('knp_menu.menu_provider', (string) \reset($providers));
27+
$container->setAlias('knp_menu.menu_provider', $providers[0]);
3428
} else {
35-
if (\class_exists(IteratorArgument::class)) {
36-
$providers = new IteratorArgument($providers);
37-
}
38-
39-
$definition = $container->getDefinition('knp_menu.menu_provider.chain');
40-
$definition->replaceArgument(0, $providers);
4129
$container->setAlias('knp_menu.menu_provider', 'knp_menu.menu_provider.chain');
4230
}
4331
}

src/DependencyInjection/Compiler/AddRenderersPass.php

Lines changed: 0 additions & 41 deletions
This file was deleted.

src/DependencyInjection/Compiler/AddVotersPass.php

Lines changed: 0 additions & 49 deletions
This file was deleted.

src/KnpMenuBundle.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
use Knp\Bundle\MenuBundle\DependencyInjection\Compiler\AddExtensionsPass;
66
use Knp\Bundle\MenuBundle\DependencyInjection\Compiler\AddProvidersPass;
7-
use Knp\Bundle\MenuBundle\DependencyInjection\Compiler\AddRenderersPass;
8-
use Knp\Bundle\MenuBundle\DependencyInjection\Compiler\AddVotersPass;
97
use Knp\Bundle\MenuBundle\DependencyInjection\Compiler\RegisterMenusPass;
108
use Symfony\Component\DependencyInjection\ContainerBuilder;
119
use Symfony\Component\HttpKernel\Bundle\Bundle;
@@ -19,8 +17,6 @@ public function build(ContainerBuilder $container): void
1917
$container->addCompilerPass(new RegisterMenusPass());
2018
$container->addCompilerPass(new AddExtensionsPass());
2119
$container->addCompilerPass(new AddProvidersPass());
22-
$container->addCompilerPass(new AddRenderersPass());
23-
$container->addCompilerPass(new AddVotersPass());
2420
}
2521

2622
public function getPath(): string

tests/DependencyInjection/Compiler/AddProvidersPassTest.php

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,10 @@
55
use Knp\Bundle\MenuBundle\DependencyInjection\Compiler\AddProvidersPass;
66
use Knp\Menu\Provider\ChainProvider;
77
use PHPUnit\Framework\TestCase;
8-
use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
98
use Symfony\Component\DependencyInjection\ContainerBuilder;
10-
use Symfony\Component\DependencyInjection\Reference;
119

1210
class AddProvidersPassTest extends TestCase
1311
{
14-
public function testProcessWithoutProviderDefinition(): void
15-
{
16-
$containerBuilder = new ContainerBuilder();
17-
(new AddProvidersPass())->process($containerBuilder);
18-
19-
self::assertFalse($containerBuilder->hasAlias('knp_menu.menu_provider'));
20-
}
21-
2212
public function testProcessForOneProvider(): void
2313
{
2414
$containerBuilder = new ContainerBuilder();
@@ -33,12 +23,6 @@ public function testProcessForOneProvider(): void
3323

3424
public function testProcessForManyProviders(): void
3525
{
36-
$expectedProviders = [new Reference('id'), new Reference('id2')];
37-
38-
if (\class_exists(IteratorArgument::class)) {
39-
$expectedProviders = new IteratorArgument($expectedProviders);
40-
}
41-
4226
$containerBuilder = new ContainerBuilder();
4327
$containerBuilder->register('knp_menu.menu_provider.chain', ChainProvider::class)->setArgument(0, []);
4428
$containerBuilder->register('id')->addTag('knp_menu.provider');
@@ -48,9 +32,5 @@ public function testProcessForManyProviders(): void
4832

4933
self::assertTrue($containerBuilder->hasAlias('knp_menu.menu_provider'));
5034
self::assertSame('knp_menu.menu_provider.chain', (string) $containerBuilder->getAlias('knp_menu.menu_provider'));
51-
52-
self::assertEquals(
53-
[$expectedProviders],
54-
$containerBuilder->getDefinition('knp_menu.menu_provider.chain')->getArguments());
5535
}
5636
}

tests/DependencyInjection/Compiler/AddRenderersPassTest.php

Lines changed: 0 additions & 56 deletions
This file was deleted.

tests/DependencyInjection/Compiler/AddVotersPassTest.php

Lines changed: 0 additions & 67 deletions
This file was deleted.

0 commit comments

Comments
 (0)