Laravel-如何在没有额外请求的情况下将缓存的值传递给多个视图?

Laravel-如何在没有额外请求的情况下将缓存的值传递给多个视图?,laravel,performance,optimization,view,service-provider,Laravel,Performance,Optimization,View,Service Provider,具有多个从缓存检索的数据集合,需要传递到多个不同的视图。 为了优化性能,需要只检索一次,而不需要额外的缓存请求 因此,使用ViewComposer不是一个选项——它为每个列出的视图触发缓存请求 在AppServiceProvider中使用以下解决方案: class AppServiceProvider extends ServiceProvider { public function boot() { view()->share('somedata', Ca

具有多个从缓存检索的数据集合,需要传递到多个不同的视图。 为了优化性能,需要只检索一次,而不需要额外的缓存请求

因此,使用ViewComposer不是一个选项——它为每个列出的视图触发缓存请求

在AppServiceProvider中使用以下解决方案:

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        view()->share('somedata', Cache::get('somekey')); 
    }
但在本例中,数据传递到所有视图,从内存消耗的角度来看,这是不好的。 只需要将数据传递到特定视图的能力。(不是页面,因为几乎每页都使用这些视图) 大致如下: 视图(['viewname1','viewname2'])->共享('somedata',缓存::获取('somekey')

您可以使用。下面的示例取自文档

在AppServiceProvider中注册视图生成器,并指定其应附加到的路由

View::composer(
    ['profile', 'dashboard'], // the routes you want to share it with
    'App\Http\View\Composers\MyViewComposer' // your registered view composer
);
在视图生成器中,获取缓存的变量并将其传递给视图

public function compose(View $view)
{
    $someData = Cache::get('somekey');

    $view->with($someData);
}

可以在viewComposer中列出要使用共享变量的视图。您只需选择与所有视图共享变量的简单方法。在这种情况下,它将仅在指定的路由上为每个视图触发缓存请求。