Php 如何在Laravel中将变量传递给服务提供商?

Php 如何在Laravel中将变量传递给服务提供商?,php,laravel,relationship,service-provider,Php,Laravel,Relationship,Service Provider,我想在侧边栏中生成一个动态菜单,并与Laravel5.1中的所有视图共享 比如: 尽管所有这些元素都属于另一个名为课程的实体,但我可以在顶部菜单中选择该实体(用户可以有多个课程) 因此,每次我访问课程、模块、主题或内容时,他们都需要告诉侧边栏菜单,哪个课程是所有这些孩子的父亲(或祖父)来生成菜单 在AppServiceProvider中,我有view composer,一切正常,但我正在使用会话获取课程ID,我不喜欢这样做 如何将$course传递给服务提供商,或者还有其他更好的方法吗?实际上,

我想在侧边栏中生成一个动态菜单,并与Laravel5.1中的所有视图共享

比如:

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

因此,每次我访问课程、模块、主题或内容时,他们都需要告诉侧边栏菜单,哪个课程是所有这些孩子的父亲(或祖父)来生成菜单

在AppServiceProvider中,我有view composer,一切正常,但我正在使用会话获取课程ID,我不喜欢这样做


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

实际上,在这种情况下,您不应该尝试将变量传递给服务提供商。如果需要,可以使用Laravel实现,因为它是全局的,并且在应用程序启动时初始化

但由于您只是构建菜单,我建议将菜单构建委托给特定的类。在控制器中创建此类的实例并将其传递给视图。调用它的方法,迭代它的属性以获得菜单结构


如果您有各种应用程序部件提供有关此侧菜单的信息,您可以利用这些部件将菜单片段收集在一起。

为什么不从控制器调用视图生成器?如果必须从控制器调用视图生成器,我可能只需将var传递给正在加载到每个控制器中的视图,就可以完成此任务。这可能就是答案。你在哪里加载
$course
?如果您在控制器中执行此操作,则无法将其传递给服务提供商,因为此时它已加载。是的,我正在控制器中加载$course。那么,还有更好的解决办法吗?我真的不想在每个控制器的每个动作中手动传递它。它必须有更好的方法
- Marks Module
    - Langosh Topic
       - Content 1
       - Content 2
    -Nitzsche Topic
       - Content 3
- Rolfson Module