Skip to content

Instantly share code, notes, and snippets.

@stof
Forked from immutef/ConfigureMenuEvent.php
Created December 18, 2011 21:03
Show Gist options
  • Save stof/1494457 to your computer and use it in GitHub Desktop.
Save stof/1494457 to your computer and use it in GitHub Desktop.
MenuBundle EventDispatcher integration
<?php
namespace Turtle\AcpBundle\Event;
use Symfony\Component\EventDispatcher\Event;
use Knp\Menu\ItemInterface;
class ConfigureMenuEvent extends Event
{
/**
* @var \Knp\Menu\ItemInterface
*/
private $menu;
/**
* @param \Knp\Menu\ItemInterface $menu
*/
public function __construct(ItemInterface $menu)
{
$this->menu = $menu;
}
/**
* @return \Knp\Menu\ItemInterface
*/
public function getMenu()
{
return $this->menu;
}
}
<?php
namespace Versus\RankedMatchBundle;
use Turtle\AcpBundle\Event\ConfigureMenuEvent;
class ConfigureMenuListener
{
/**
* @param \Turtle\AcpBundle\Event\ConfigureMenuEvent $event
*/
public function onMenuConfigure(ConfigureMenuEvent $event)
{
$menu = $event->getMenu();
$menu->addChild('Matches', array('route' => 'versus_rankedmatch_acp_matches_index'));
$menu->addChild('Participants', array('route' => 'versus_rankedmatch_acp_participants_index'));
}
}
<?php
namespace Turtle\AcpBundle;
final class MenuEvents
{
const CONFIGURE = 'turtle_menu.configure';
}
<?php
namespace Turtle\AcpBundle\Menu;
use Knp\Menu\FactoryInterface;
use Symfony\Component\DependencyInjection\ContainerAware;
use Turtle\AcpBundle\MenuEvents;
use Turtle\AcpBundle\Event\ConfigureMenuEvent;
class MainBuilder extends ContainerAware
{
public function build(FactoryInterface $factory)
{
$menu = $factory->createItem('root');
$menu->setCurrentUri($this->container->get('request')->getRequestUri());
$menu->addChild('Dashboard', array('route' => '_acp_dashboard'));
$this->container->get('event_dispatcher')->dispatch(MenuEvents::CONFIGURE, new ConfigureMenuEvent($menu));
return $menu;
}
}
parameters:
versus.configure_menu_listener.class: Versus\RankedMatchBundle\ConfigureMenuListener
services:
versus.configure_menu_listener:
class: %versus.configure_menu_listener.class%
tags:
- { name: kernel.event_listener, event: turtle_menu.configure, method: onMenuConfigure }
{{ knp_menu_render('TurtleApcBundle:MainBuilder:build') }}
@ardianys
Copy link

wow, beautiful code, thanks for sharing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment