Laravel-如何在没有额外请求的情况下将缓存的值传递给多个视图?
具有多个从缓存检索的数据集合,需要传递到多个不同的视图。 为了优化性能,需要只检索一次,而不需要额外的缓存请求 因此,使用ViewComposer不是一个选项——它为每个列出的视图触发缓存请求 在AppServiceProvider中使用以下解决方案: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
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中列出要使用共享变量的视图。您只需选择与所有视图共享变量的简单方法。在这种情况下,它将仅在指定的路由上为每个视图触发缓存请求。