Laravel 5从存储库向所有视图共享数据(避免重复查询)


Laravel 5 sharing data to all views from repositories (avoid duplicate queries)

我有一个布局,其中包括很多模态窗口,这是可访问的每个页面。每种模态都需要一些数据。例如,我有一个模态与任务创建表单需要任务类型。另一方面,任务创建表单可能包含在我的网站的一些页面。这意味着在某些页面上有2个或更多相同的表单。它们都需要相同的数据。

我读过view()->share方法。问题是我有很多东西要分享,这些东西是我从存储库中获得的。我有一个视图作曲家的服务提供商,在那里我试图注入存储库并传递数据到视图共享,但显然它不起作用,我得到了500个错误,没有任何日志。

那么,简单地说,我如何从任务存储库获得任务类型并传递给所有视图?现在我有'View::composer('private.*', 'CRM'ViewComposers'SharedDataViewComposer');,但如果有2个或更多的表单包含在一个视图中,数据是重复的,因为视图编写器提供了2个具有相同数据的视图。

你可以向应用程序提供程序boot()方法传递你需要数据的视图数组,然后,只有在这个视图中数据才可用。例如,如果你有一个包含3个其他视图的视图,你可以在这个数组中放入你需要的视图的名称,它会忽略其余的。

例如:

protected $viewsList = array('view1', 'view2', 'view3');    
public function boot()
{   
    view()->composer($viewsList, function($view){
        $extraInfo = 'the data you need';
        $view->with("extra_info", $extraInfo);
    });
}

然后,在您的视图中使用这个数据:

@if(isset($extra_info))
      <p>{{ $extra_info }}</p>
@endif