Menus¶
Chill has created his own menu system
See also
- Routes dans Chill [specification]
- The issue wich discussed the implementation of routes.
Concepts¶
Warning
to be written
Add a menu in a template¶
In your twig template, use the chill_menu function :
{{ chill_menu('person', {
'layout': 'ChillPersonBundle::menu.html.twig',
'args' : {'id': person.id },
'activeRouteKey': 'chill_person_view'
}) }}
The available arguments are:
- layout : a custom layout. Default to ChillMainBundle:Menu:defaultMenu.html.twig
- args : those arguments will be passed through the url generator.
- activeRouteKey must be the route key name.
Note
The argument activeRouteKey may be a twig variable, defined elsewhere in your template, even in child templates.
Create an entry in an existing menu¶
If a route belongs to a menu, you simply add this to his definition in routing.yml :
chill_person_history_list:
pattern: /person/{person_id}/history
defaults: { _controller: ChillPersonBundle:History:list }
options:
#declare menus
menus:
# the route should be in 'person' menu :
person:
#and have those arguments :
order: 100
label: menu.person.history
- order (mandatory) : the order in the menu. It is preferrable to increment by far more than 1.
- label (mandatory) : a translatable string.
- helper (optional) : a text to help people to understand what does the menu do. Not used in default implementation.
- condition (optional) : an `Expression Language <http://symfony.com/doc/current/components/expression_language/index.html> `_ which will make the menu appears or not. Typically, it may be used to say “show this menu only if the person concerned is more than 18”. Not implemented yet.
- access (optional) : an Expression Language to evalute the possibility, for the user, to show this menu according to Access Control Model. Not implemented yet.
You may add additional keys, but should not use the keys described above.
You may add the same route to multiple menus :
chill_person_history_list:
pattern: /person/{person_id}/history
defaults: { _controller: ChillPersonBundle:History:list }
options:
menus:
menu1:
order: 100
label: menu.person.history
menu2:
order: 100
label: another.label
Customize menu rendering¶
You may customize menu rendering by using the layout option.
Warning
TODO : this part should be written.
Caveats¶
Currently, you may pass arguments globally to each menu, and they will be all passed to route url. This means that :
- the argument name in the route entry must match the argument key in menu declaration in twig template
- if an argument is missing to generate an url, the url generator will throw a SymfonyComponentRoutingExceptionMissingMandatoryParametersException
- if the argument name is not declared in route entry, it will be added to the url, (example: /my/route?additional=foo)