使用带有分页视图的 Laravel View Composers 共享数据不起作用

Posted

技术标签:

【中文标题】使用带有分页视图的 Laravel View Composers 共享数据不起作用【英文标题】:Sharing data using Laravel View Composers with paginated view not working 【发布时间】:2020-03-01 08:33:59 【问题描述】:

我想将一些数据共享到多个视图,在这些视图中我使用 Laravel 的 View Composers 概念,如下所示: 在 AppServiceProvider.php

view()->composer('*', function ($view)
    
        /* SHARED DATA */
        $socialLinks = $settings = $categories =  array();

        if(Schema::hasTable('social_links')) 
            $socialLinksObj = new SocialLinkService();
            $socialLinks = $socialLinksObj->all();
        

        if(Schema::hasTable('settings')) 
            $settingService = new SettingService();
            $settings = $settingService->list();
        

        /* END SHARED DATA */
        $view->with([
            'socialLinks' => $socialLinks,
            'settings' => $settings,
        ]);
    );

上面的代码工作正常,因为它与每个视图共享数据,但我有相同的视图,它们具有像这个查询这样的分页数据:

Inventories::with($relations)->latest()->paginate($pagination)

在这个页面中,我有我从视图作曲家分享的数据,您可以在下面的屏幕截图中看到

但是当我转到下一页时,共享数据不可用。

我应该怎么做才能实现我的目标?

【问题讨论】:

这个问题与 Composer 有什么关系?请不要在您的问题上使用不相关的标签 【参考方案1】:

所以,首先这不是一个很好的视图作曲家使用。该代码针对每个被渲染的单个视图刀片运行,并且效率非常低。

如果您需要共享几条数据,我会将此代码放入您的 AppServiceProvider::boot() 方法中:

        /* SHARED DATA */
        $socialLinks = $settings = $categories =  array();

        if(Schema::hasTable('social_links')) 
            $socialLinksObj = new SocialLinkService();
            $socialLinks = $socialLinksObj->all();
        

        if(Schema::hasTable('settings')) 
            $settingService = new SettingService();
            $settings = $settingService->list();
        

        /* END SHARED DATA */
        View::share('socialLinks', $socialLinks);
        View::share('settings', $settings);

然后您的变量在每个视图上都可用$socialLinks$settings。请记住,如果您在代码中的任何时候将另一个 socialLinkssettings 传递给您的视图,它将被最后一组覆盖。

【讨论】:

以上是关于使用带有分页视图的 Laravel View Composers 共享数据不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 Laravel 将两个模型合并到一个分页查询中,并带有急切加载的关系

带有存储库的 Laravel View Composer 不工作;

laravel的分页系统,怎么获取他的total

laravel5.5中添加对分页样式的修改上一页和下一页

Laravel Mysql 在视图中显示记录

Laravel 5.2 分页