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