使用带有分页视图的 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
。请记住,如果您在代码中的任何时候将另一个 socialLinks
或 settings
传递给您的视图,它将被最后一组覆盖。
【讨论】:
以上是关于使用带有分页视图的 Laravel View Composers 共享数据不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel 将两个模型合并到一个分页查询中,并带有急切加载的关系