我在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);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有办法确保它只运行一次,无论我加载了多少视图,还是有另一种解决方案?我现在修理它的方式对我来说并不合适.谢谢!
不幸的是,由于 View Composers 的实现方式,没有办法让它运行一次。该Illuminate\View\View::renderContents()
方法负责调用绑定到视图的作曲家,并且由于任何形式的视图渲染(Blade 模板继承或简单@include
语句)都会执行该方法,这意味着当渲染任何视图时,任何绑定到它的作曲家都会被触发。
由于在您的情况下您使用*
通配符绑定所有视图,如果您的页面呈现十个视图,则作曲家将被执行十次。但是,您的方法看起来是解决此缺点的好方法。
归档时间: |
|
查看次数: |
1151 次 |
最近记录: |