### Renderizando el menú
###
Para renderizar el menú desde cualquier plantilla se debe hacer un render del controlador de la siguiente
forma:
```tiwg
   
    {#slugMenu recibe el slug del menú ubicado en la tabla qb_menu#}
    {#slugItemSelected se utiliza para saber la opción selecciona por el slug y que aparezca seleccionada#}
    {#scope tipo de plantilla de la que se va a cargar el menú, front, backend, etc...#}
    {{ render(controller('QbaBitMenuBundle:Menu:rendeMenu', {slugMenu: 'main', slugItemSelected: app.request.get('slug'), scope: 'backend'})) }}
```

### Servicios
###

Existe un servicio llamado qbabit.menu.render_item que se encarga de renderizar adentro del macro los items de menú
en caso de que se necesite, por defecto el macro tiene una maquetación a renderizar. ¿Dónde sería útil el servicio?
En los casos en que un item del menú se deba renderizar de forma distinta a la predeterminada por la macro. Estas macros
de menú pueden ser redefinidas por las plantillas.

Con el fin de mantener una estructura y línea de desarrollo uniforme se ha creado la Interface QbaBitRenderMenuServiceInterface,
cada servicio que se implemente para renderizar un item de menú debría implementar esta interface. Para facilitar su uso
se ha creado la clase abstracta QbaBitAbstractRenderMenuService que implementa uno de los métodos de la interface,
o sea, implementa el constructor. A continuación se muestra el código que permite configurar un item de menú con
la configuración de un servicio que renderiza a un item.

```php
    //se crea un menú
    $menu = new QbMenu();
    $menu->setName('Main');
    $menu->setSlug('main');
    $menu->setOrder(1);

    //se crea la configuración del item del menú
    $config = new QbMenuItemsConfiguration();
    $config->setRoute('mi_route');//ruta a generar

    //parámetros que recibe la ruta a generar, si acá no se define un slug por defecto usa el del menú
    $config->setRouteParams(['slug'=>'slug_del_item', 'otro_parametro'=>530]);

    //roles que pueden ver el menú, el rol usado es solo para el ejemplo, segun el caso que sea el rol debe cambiar, 
    //si no se especifica un rol quiere decir que es un elemento visible para todos los usuarios. 
    $config->setPermissions(['ROLE_Z']);

    /**
    * Opción importante, indica el modo de renderizado del item, en el caso de pasar childs va a renderizar el
    * item padre tal cual está definido por defecto en el macro y el servicio se va a encargar de renderizar
    * los hijos según se haya definido en el servicio configurado
    */
    $config->setRenderMode('childs');

    /**
    * servicio que se encarga de renderizar el item del menú
    */
    $config->setServiceName('qbabit.servicios_renderizado.personalizado');

    //creando el item de menú que se va a mostrar
    $menuItem = new QbMenuItems();
    $menuItem->setName('Nombre Item');
    $menuItem->setMenu($menu);
    $menuItem->setSlug('slug-menu');
    $menuItem->setMetadata($config);
    $menuItem->setOrder(1);
```