创建菜单建筑商为服务
编辑该页面创建菜单建筑商为服务
这个包给你一个非常方便的方式来创建菜单遵循会议——如果需要的话——将整个容器。
然而,如果你想,你可以选择创建一个服务菜单生成器。这种方法的优点是,你可以完全依赖项注入你的菜单生成器的需求,而不是将整个服务容器。这可能会导致代码的可测试性,也可能提高可重用性。缺点是它需要一点设置。
首先创建一个构建器为你的菜单。你可以把你想要尽可能多的菜单变成一个建设者,所以你可能只有一个(或几个)这些在您的应用程序构建器类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29
/ / src /菜单/ MenuBuilder.php名称空间应用程序\菜单;使用Knp\菜单\FactoryInterface;使用Knp\菜单\ItemInterface;类MenuBuilder{私人美元工厂;/ * * *添加任何其他依赖你需要…* /公共函数__construct(FactoryInterface美元工厂){美元这- >工厂=美元工厂;}公共函数createMainMenu(数组美元选项):ItemInterface{美元菜单=美元这- >工厂- >createItem (“根”);美元菜单- >addChild (“回家”,(“路线”= >“主页”]);/ /……添加更多的孩子返回美元菜单;}}
接下来,注册您的菜单建设者服务并注册它createMainMenu
方法作为一个菜单建设者:
1 2 3 4 5 6 7 8 9
#配置/ services.yaml服务:app.menu_builder:类:应用程序菜单\ \ MenuBuilder参数:(“@knp_menu.factory”)标签:- - - - - -{名称:knp_menu.menu_builder,方法:createMainMenu,别名:主要}#别名是用于检索菜单#……
您现在可以渲染菜单中直接通过名字的一个模板别名
关键上图:
1
{{knp_menu_render(主要)}}
假设现在我们需要创建第二个菜单栏。这个过程很简单!首先添加一个新的方法来构建器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/ / src /菜单/ MenuBuilder.php/ /……类MenuBuilder{/ /……公共函数createSidebarMenu(数组美元选项):ItemInterface{美元菜单=美元这- >工厂- >createItem (“侧边栏”);如果(收取(美元选项(“include_homepage”)& &美元选项(“include_homepage”){美元菜单- >addChild (“回家”,(“路线”= >“主页”]);}/ /……添加更多的孩子返回美元菜单;}}
现在,创建一个服务只是你的新菜单,给它一个新的名字,侧边栏
:
1 2 3 4 5 6 7 8 9 10
#配置/ services.yaml服务:app.menu_builder:类:应用程序菜单\ \ MenuBuilder参数:(“@knp_menu.factory”)标签:- - - - - -{名称:knp_menu.menu_builder,方法:createMainMenu,别名:主要}#前面的菜单- - - - - -{名称:knp_menu.menu_builder,方法:createSidebarMenu,别名:侧边栏}这次名为“侧边栏”的##……
它现在可以呈现,就像其他的菜单:
1 2
{%集菜单= knp_menu_get(“侧边栏”,[],{include_homepage:假})%}{{knp_menu_render(菜单)}}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。