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