如何在Laravel中向服务提供者传递变量?

3
我希望在Laravel 5.1中生成一个动态菜单,并在侧边栏中与所有视图共享。
例如:
- Marks Module
    - Langosh Topic
       - Content 1
       - Content 2
    -Nitzsche Topic
       - Content 3
- Rolfson Module

尽管所有这些元素都属于另一个名为课程的实体,在顶部菜单中我可以选择它们(用户可以有多个课程)。

所以每次访问课程、模块、主题或内容时,它们需要告诉侧边栏菜单哪个课程是它们所有孩子的父亲(或祖父),以生成菜单。

在AppServiceProvider中,我有视图composer,一切都正常工作,但我使用会话来获取课程ID,我不喜欢这个想法。

如何将$course传递给服务提供者,或者还有其他更好的方法吗?


为什么你不从控制器中调用视图组合器? - Moppo
如果我必须从我的控制器中调用视图组合器,我可能只需将变量传递给每个控制器中加载的视图,这样就可以完成工作。这实际上可能是答案。 - Leonardo Beal
1
你在哪里加载$course?如果你是在控制器中这样做的话,那么在此之后就没有办法将其传递给服务提供者了,因为它已经被加载了。 - marstato
是的,我正在控制器中加载$course。有更好的解决方案吗?我真的不想在每个控制器的每个操作中手动传递它。一定有更好的方法。 - Leonardo Beal
1个回答

1
实际上,在这种情况下,您不应尝试将变量传递给服务提供程序。如果需要,可以使用 Laravel 的 container,因为它是全局的,并在应用程序启动时初始化。
但由于您只是构建菜单,我建议将菜单构建委托给特定的类。在控制器中创建此类的实例并将其传递给视图。调用它的方法,迭代它的属性以获取菜单结构。
如果您有多个应用程序部分提供有关此侧栏菜单的信息,则可以利用 events 将菜单片段聚集在一起。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接