php - 查看composer运行多次,如何减少到1

标签 php laravel

我在 Laravel 5 中创建了一个 View 编辑器。当我使用通配符 * 向我的所有 View 添加内容时,它至少被调用两次。它在加载我的主模板时运行,并在包含我的内容页面时再次运行。这将在未来带来问题,因为它会多次执行它执行的查询。我能够通过将其存储在静态变量中来修复多重查询:

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);
}

} 

我的问题是,有没有办法确保它只运行一次,无论我加载了多少 View ,或者是否有其他解决方案?我现在修复它的方式对我来说并不合适。谢谢!

最佳答案

很遗憾,由于 View Composer 的实现方式,无法让它运行一次。 Illuminate\View\View::renderContents()方法负责调用绑定(bind)到 View 的 composer,并且由于任何形式的 View 渲染(Blade 模板继承或简单的 @include 语句)都会执行该方法,这意味着当渲染任何 View 时,任何 composer绑定(bind)到它会被触发。

由于在您的情况下您使用 * 通配符来绑定(bind)所有 View ,如果您的页面呈现十个 View ,则 Composer 将执行十次。但是,您的方法看起来是解决此缺点的好方法。

关于php - 查看composer运行多次,如何减少到1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30673749/

相关文章:

php - PHP的spl_autoload_register是如何解决与require_once的循环依赖的?

php - 使用 PHP 导出完整的 MySQL 数据库

php - 如何在 Laravel 4 中为每个环境设置不同的播种机?

php - Laravel exec() 产生一个 mysql-dump 空文件

javascript - 通过 javascript 添加 cookie 导致我的 laravel 错误

php - Laravel 5 Eloquent 字符集 utf8 问题

php - 流明:异常处理程序 - 不捕获 QueryException 或 PDOException

php - AJAX PHP 回显 js 代码,不起作用

php - FOSMessageBundle - 如何在没有收件人字段的情况下发送消息

php - laravel 或 AWS 没有检测到我的 https