【发布时间】:2015-08-20 19:55:28
【问题描述】:
我在 Laravel 5 中创建了一个视图作曲家。当我使用通配符 * 来为我的所有视图添加一些内容时,它至少会被调用两次。它在加载我的主模板时运行,并在包含我的内容页面时再次运行。这将在未来产生问题,因为它会执行多次执行的查询。我能够通过将多个查询存储在静态变量中来修复它:
class StoreComposer {
static $composed;
public function __construct(StoreRepository $repository)
{
$this->store = $repository;
}
public function compose(View $view)
{
if(static::$composed)
{
return $view->with('store', static::$composed);
}
static::$composed = $this->store->pushCriteria( new WithCategories() )
->pushCriteria( new WithSettings() )
->applyCriteria()
->all();
$view->with('store', static::$composed);
}
}
我的问题是,有没有办法确保它只运行一次,无论我加载多少视图,还是有其他解决方案?我现在修复它的方式对我来说感觉不对。谢谢!
【问题讨论】:
-
你有没有找到解决这个问题的新方法?我刚刚遇到了这个问题,并意识到我的一些页面正在执行多次查询,因为我在每个页面上都使用了如此多的视图。
-
我还没有找到任何新的解决方案。我建议为您的 viewcomposer 类创建一个基类,用于处理静态变量中的存储。
-
感谢您的回复。我实际上重构了很多查询,使其更加明确并在控制器中运行。 View Composers 对我来说总是觉得有点太神奇
-
如果你不需要所有页面上的查询结果,确实有点矫枉过正;)。很高兴您找到了适合您的解决方案。