用户登录我正在开发的应用程序后,根据他们的角色,他们需要显示一组不同的菜单项。
我创建了一个名为“menu”的过滤器,我在其中组装菜单项。我在routes.php
中有这个在所有内容之前运行我的过滤器:
Route::group(array('before' = 'auth|menu'), function()...
在菜单过滤器的末尾,我这样做是为了在每个视图中都可以访问菜单类:
View::share('menu', $menu);
对于实际构建菜单我使用Laravel Menu bundle,但我还没有找到从控制器动态设置菜单项“active”标志的最佳方法。
菜单包检查URL以设置活动标志(这对我不起作用,因为它似乎将路径名与URI::current()
进行比较,只有后者返回包含域,端口和所有内容的完整URL,所以它永远不会匹配)但我宁愿以某种方式从我的控制器中访问$menu
类,所以我可以直接修改它。
我该怎么做?当使用注册表(a.k.a.美化全局变量)时会出现这种情况吗?
答案 0 :(得分:2)
会给你基本的想法,你会准备好继续前进。使用IoC容器将菜单对象实例化为单例,然后从控制器或视图访问它。注入菜单的另一种方法是使用View Composer。您可以深入了解Laravel文档和源代码。