zerkalica/millwright-menu-bundle
Installation:
composer require zerkalica/millwright-menu-bundle dev-master
Register the bundle in AppKernel.php:
new Millwright\MenuBundle\MillwrightMenuBundle(),
new Knp\Bundle\MenuBundle\KnpMenuBundle(),
new Millwright\ConfigurationBundle\MillwrightConfigurationBundle()
Basic Configuration:
Add to config.yml:
knp_menu:
twig: true
default_renderer: twig
First Menu:
Create app/config/menu.yml:
millwright_menu:
items:
homepage:
label: 'Home'
route: homepage
tree:
main:
type: navigation
children:
homepage: ~
Render in Twig:
{{ millwright_menu_render('main') }}
menu.yml (e.g., main, admin, user).tree:
admin_panel:
type: navigation
children:
dashboard: ~
users:
children:
list: ~
create: ~
Pass dynamic parameters to adjust visibility/links:
{% for user in users %}
{{ millwright_menu_render('user_actions', { id: user.id }) }}
{% endfor %}
Override menu items per action:
/**
* @Route("/admin/users", name="admin_users")
* @Menu(label="Users", translateDomain="AdminBundle")
*/
public function listAction() { ... }
Leverage @Secure (roles) and @SecureParam (ACL) from JMSSecurityExtraBundle:
/**
* @Secure(roles="ROLE_ADMIN")
* @SecureParam(name="user", permissions="EDIT")
*/
public function editAction(User $user) { ... }
Extend default Twig templates:
renderers:
dropdown:
renderer: twig
rendererOptions:
template: MyBundle:Menu:dropdown.html.twig
Deprecated Dependencies:
dev-master (last release: 2018). Test thoroughly; may conflict with newer Symfony/KnpMenu versions.JMSSecurityExtraBundle for ACL/role annotations.Merge Conflicts:
bin/console debug:container millwright_menu.menu_options
Translation Quirks:
translateDomain defaults to MillwrightMenuBundle. Override per item:
items:
fos_user_profile:
translateDomain: FOSUserBundle
Route Resolution:
route is missing, the item key is used as the route name. Explicitly define routes to avoid ambiguity.{{ dump(millwright_menu('main').getChildren()) }}
bin/console debug:security to verify roles/ACL permissions.Custom Menu Providers: Tag services to contribute menus:
<service id="my_menu_provider" class="My\MenuProvider">
<tag name="millwright_menu.menu_options" order="200"/>
</service>
Override Default Renderer:
Extend MillwrightMenuBundle:Default:knp_menu.html.twig or register a custom renderer in menu.yml.
Dynamic Item Visibility:
Use showNonAuthorized or showAsText for non-authorized users:
items:
admin_dashboard:
showNonAuthorized: false
showAsText: true
knp_menu.cache config) to avoid rebuilding on every request.routeParams to only necessary dynamic values.How can I help you explore Laravel packages today?