【发布时间】:2014-07-07 21:38:25
【问题描述】:
我正在使用视图编辑器来创建我网站的导航结构。导航中的一些链接是动态的,需要几个数据库查询。一切都很好,但是,如果我使用加载在同一页面上的多个视图注册视图编辑器(例如:主导航视图和辅助侧边栏视图),这些数据库查询将执行多次。这是因为 Laravel 每次创建一个视图时都会实例化我的 Navigation 类,这是预期的行为。
但是,我想消除这些重复的查询。我的第一个想法是实现某种单例模式,但这不会起作用,因为 Laravel 的视图作曲家是如何工作的。有什么方法可以在这里模仿单例模式吗?或者也许是消除这些重复数据库查询的更好方法(忽略 HTML/文件缓存)?
下面是我为喜欢视觉的人所做的事情的简要介绍:
查看 Composer 注册:
View::composer(array('layouts.nav', 'layouts.sidebar'), '\Namespace\ViewComposers\Navigation');
/Namespace/ViewComposers/Navigation.php:
public function compose(View $view)
{
$navigation = array();
...
// Some code that requires DB queries
...
$view->navigation = $navigation;
}
/views/layouts/nav.blade.php:
@foreach($navigation as $nav)
...
@endforeach
/views/layouts/sidebar.blade.php:
@foreach($navigation as $nav)
...
@endforeach
【问题讨论】: