Silex Integration ================= KnpMenu provides an extension for the [Silex](http://silex-project.org/) microframework. RouterAwareFactory ------------------ The `Knp\Menu\Silex\RouterAwareFactory` extends the default factory to add the support of the url generator of the Symfony2 Routing component. You can then pass 3 new options to the factory: * `route`: The route name (the generator will be used if the name is not `null`) * `routeParameters`: The parameters to generate the url (if omitted, an empty array is used) * `routeAbsolute`: Whether the generated url should be absolute (default `false`) >**NOTE** >When you give both a route and an uri to the factory, the route will be used. Using the KnpMenuExtension -------------------------- ### Registering the extension ```php registerNamespace('Knp\Menu', __DIR__.'/vendor/KnpMenu/src'); // registering the extension $app->register(new \Knp\Menu\Silex\KnpMenuServiceProvider()); ``` >**WARNING** >The Twig integration is available only when the KnpMenuServiceProvider is registered >**after** the TwigServiceProvider in your application. #### Parameters * **knp_menu.menus** (optional): an array of ``alias => id`` pair for the [menu provider](02-Twig-Integration.markdown#menu-provider). * **knp_menu.renderers** (optional): an array of ``alias => id`` pair for the [renderer provider](02-Twig-Integration.markdown#renderer-provider). * **knp_menu.default_renderer** (optional): the alias of the default renderer (default to `'list'`) * **knp_menu.template** (optional): The template used by default by the TwigRenderer. #### Services * **knp_menu.factory**: The menu factory (it is a router-aware one if the UrlGeneratorExtension is registered) * **knp_menu.renderer.list**: The ListRenderer * **knp_menu.renderer.twig**: The TwigRenderer (only when the Twig integration is available) ### Adding your menu to the menu provider Making your menu available through the menu provider is really easy. Simply create the menu as a service in the application and register it in the parameter: ```php createItem('root'); $menu->addChild('Home', array('route' => 'homepage')); // ... add more children return $menu; }; $app['knp_menu.menus'] = array('main' => 'my_main_menu'); ``` Your menu is now available in the [menu provider](02-Twig-Integration.markdown#menu-provider) with the name `main`.