Php 理解Laravel视图作曲家:我的视图作曲家属于哪里?

Php 理解Laravel视图作曲家:我的视图作曲家属于哪里?,php,laravel,Php,Laravel,我正在阅读Laravel文档以获得更深入的理解,这将是我第二次遇到一些困惑 不久前,我正在处理一个Laracasts视频,其中我们在AppServicesProviderregister方法中实现了一个视图生成器 看起来是这样的: public function register() { view()->composer('layouts.sidebar', function ($view) { $archives = \App\Post::archives();

我正在阅读Laravel文档以获得更深入的理解,这将是我第二次遇到一些困惑

不久前,我正在处理一个Laracasts视频,其中我们在
AppServicesProvider
register方法中实现了一个视图生成器

看起来是这样的:

public function register()
{
    view()->composer('layouts.sidebar', function ($view) {
        $archives = \App\Post::archives();
        $tags = \App\Tag::has('posts')->pluck('name');
        $view->with(compact('archives', 'tags'));
    });
}
这样做的目的是,它使存档和标记可用于我们的侧边栏视图,而侧边栏视图几乎可用于每个页面。(Laracast视频涉及从头开始创建博客)

到目前为止还不错

今天,在阅读视图生成器的文档时,我遇到了:

现在,我想我理解了创建自己的
ComposerServiceProvider
和基于类的编写器与基于闭包的编写器的区别。我感到困惑的原因是,这是在
boot()
方法和
register()
方法中完成的

这完全有可能是我在错误的地方写的。如果我仔细想想,它在
register()
方法中几乎没有意义,因为register应该只用于注册服务。在调用所有寄存器方法之后,将调用引导。如果有人能帮我澄清这件事,我将不胜感激

视图生成器属于
register()
方法还是
boot()
方法?及 如果它属于
register()
方法,那么这只是巧合吗 它对我仍然有效吗


引用相关用户给出的答案:

引导和注册方法之间的区别? 事实上,我昨晚刚从泰勒的书中学到了区别。 以下是关于它的摘录:

所有提供商注册后,将“启动”。此 将在每个提供程序上启动启动方法。在 “使用服务提供商”正在尝试使用由提供的服务 寄存器方法中的另一个提供程序。因为,在寄存器中 方法,我们不保证已加载所有其他提供程序 您尝试使用的服务可能还不可用。因此,请检查服务 使用其他服务的提供程序代码应始终存在于引导中 方法。register方法应该只用于, 正在向容器注册服务。在启动方法中,您可以 可以做任何您喜欢的事情:注册事件侦听器,包括路由 文件、注册筛选器或任何您可以想象的内容。”

所以寄存器1只是用于绑定。最重要的是 触发某事发生


它们应该放在引导方法中。register方法不保证在您可能需要依赖项时解析依赖项。有了引导方法,你就有了保证。正如您所提到的,理想情况下,您应该为视图生成器创建一个单独的服务提供者

/**
 * Register bindings in the container.
 *
 * @return void
 */
public function boot()
{
    // Using class based composers...
    View::composer(
        'profile', 'App\Http\ViewComposers\ProfileComposer'
    );

    // Using Closure based composers...
    View::composer('dashboard', function ($view) {
        //
    });
}