Skip to content

Commit d29a1f3

Browse files
committed
Updated the bundle to support the new matcher
1 parent 1eaffe3 commit d29a1f3

File tree

7 files changed

+77
-3
lines changed

7 files changed

+77
-3
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
namespace Knp\Bundle\MenuBundle\DependencyInjection\Compiler;
4+
5+
use Symfony\Component\DependencyInjection\ContainerBuilder;
6+
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
7+
use Symfony\Component\DependencyInjection\Reference;
8+
9+
/**
10+
* This compiler pass registers the renderers in the RendererProvider.
11+
*
12+
* @author Christophe Coevoet <stof@notk.org>
13+
*/
14+
class AddVotersPass implements CompilerPassInterface
15+
{
16+
public function process(ContainerBuilder $container)
17+
{
18+
if (!$container->hasDefinition('knp_menu.matcher')) {
19+
return;
20+
}
21+
$definition = $container->getDefinition('knp_menu.matcher');
22+
23+
foreach ($container->findTaggedServiceIds('knp_menu.voter') as $id => $tags) {
24+
$definition->addMethodCall('addVoter', array(new Reference($id)));
25+
}
26+
}
27+
}

KnpMenuBundle.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Knp\Bundle\MenuBundle\DependencyInjection\Compiler\AddProvidersPass;
99
use Knp\Bundle\MenuBundle\DependencyInjection\Compiler\AddRenderersPass;
1010
use Knp\Bundle\MenuBundle\DependencyInjection\Compiler\AddTemplatePathPass;
11+
use Knp\Bundle\MenuBundle\DependencyInjection\Compiler\AddVotersPass;
1112

1213
class KnpMenuBundle extends Bundle
1314
{
@@ -19,5 +20,6 @@ public function build(ContainerBuilder $container)
1920
$container->addCompilerPass(new AddProvidersPass());
2021
$container->addCompilerPass(new AddRenderersPass());
2122
$container->addCompilerPass(new AddTemplatePathPass());
23+
$container->addCompilerPass(new AddVotersPass());
2224
}
2325
}

Resources/config/menu.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<parameters>
88
<parameter key="knp_menu.factory.class">Knp\Menu\Silex\RouterAwareFactory</parameter>
99
<parameter key="knp_menu.helper.class">Knp\Menu\Twig\Helper</parameter>
10+
<parameter key="knp_menu.matcher.class">Knp\Menu\Matcher\Matcher</parameter>
1011
<parameter key="knp_menu.menu_provider.chain.class">Knp\Menu\Provider\ChainProvider</parameter>
1112
<parameter key="knp_menu.menu_provider.container_aware.class">Knp\Bundle\MenuBundle\Provider\ContainerAwareProvider</parameter>
1213
<parameter key="knp_menu.menu_provider.builder_alias.class">Knp\Bundle\MenuBundle\Provider\BuilderAliasProvider</parameter>
@@ -25,6 +26,8 @@
2526
<argument type="service" id="knp_menu.menu_provider" />
2627
</service>
2728

29+
<service id="knp_menu.matcher" class="%knp_menu.matcher.class%" />
30+
2831
<service id="knp_menu.menu_provider.chain" class="%knp_menu.menu_provider.chain.class%" public="false">
2932
<argument type="collection" />
3033
</service>
@@ -48,6 +51,7 @@
4851

4952
<service id="knp_menu.renderer.list" class="%knp_menu.renderer.list.class%">
5053
<tag name="knp_menu.renderer" alias="list" />
54+
<argument type="service" id="knp_menu.matcher" />
5155
<argument>%knp_menu.renderer.list.options%</argument>
5256
<argument>%kernel.charset%</argument>
5357
</service>

Resources/config/twig.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
<tag name="knp_menu.renderer" alias="twig" />
2020
<argument type="service" id="twig" />
2121
<argument>%knp_menu.renderer.twig.template%</argument>
22+
<argument type="service" id="knp_menu.matcher" />
2223
<argument>%knp_menu.renderer.twig.options%</argument>
2324
</service>
2425
</services>

Resources/doc/menu_service.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ class MenuBuilder
3838
public function createMainMenu(Request $request)
3939
{
4040
$menu = $this->factory->createItem('root');
41-
$menu->setCurrentUri($request->getRequestUri());
4241

4342
$menu->addChild('Home', array('route' => 'homepage'));
4443
// ... add more children
@@ -95,7 +94,6 @@ class MenuBuilder
9594
public function createSidebarMenu(Request $request)
9695
{
9796
$menu = $this->factory->createItem('sidebar');
98-
$menu->setCurrentUri($request->getRequestUri());
9997
10098
$menu->addChild('Home', array('route' => 'homepage'));
10199
// ... add more children
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace Knp\Bundle\MenuBundle\Tests\DependencyInjection\Compiler;
4+
5+
use Knp\Bundle\MenuBundle\DependencyInjection\Compiler\AddVotersPass;
6+
use Symfony\Component\DependencyInjection\Reference;
7+
8+
class AddVotersPassTest extends \PHPUnit_Framework_TestCase
9+
{
10+
public function testProcessWithoutProviderDefinition()
11+
{
12+
$menuPass = new AddVotersPass();
13+
14+
$this->assertNull($menuPass->process($this->getMock('Symfony\Component\DependencyInjection\ContainerBuilder')));
15+
}
16+
17+
public function testProcessWithAlias()
18+
{
19+
$definitionMock = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')
20+
->disableOriginalConstructor()
21+
->getMock();
22+
$definitionMock->expects($this->once())
23+
->method('addMethodCall')
24+
->with($this->equalTo('addVoter'), $this->equalTo(array(new Reference('id'))));
25+
26+
$containerBuilderMock = $this->getMock('Symfony\Component\DependencyInjection\ContainerBuilder');
27+
$containerBuilderMock->expects($this->once())
28+
->method('hasDefinition')
29+
->will($this->returnValue(true));
30+
$containerBuilderMock->expects($this->once())
31+
->method('findTaggedServiceIds')
32+
->with($this->equalTo('knp_menu.voter'))
33+
->will($this->returnValue(array('id' => array('tag1' => array()))));
34+
$containerBuilderMock->expects($this->once())
35+
->method('getDefinition')
36+
->with($this->equalTo('knp_menu.matcher'))
37+
->will($this->returnValue($definitionMock));
38+
39+
$menuPass = new AddVotersPass();
40+
$menuPass->process($containerBuilderMock);
41+
}
42+
}

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
}
2020
],
2121
"require": {
22-
"knplabs/knp-menu": "1.1.*",
22+
"knplabs/knp-menu": "2.0.*",
2323
"symfony/framework-bundle": ">=2.0,<2.2-dev"
2424
},
2525
"autoload": {

0 commit comments

Comments
 (0)