Laravel,可变输出使用View :: share但不能与VIew :: composer一起使用

时间:2014-01-08 22:24:47

标签: view laravel laravel-4 twig

我的所有观点都需要相同的菜单。

所以我得到了在我的BaseController中定义的构造函数中输出菜单所需的数据。

为了获得数据,我首先尝试使用View :: composer但不知道为什么我没有收到任何错误,看起来View :: composer根本没有执行...

如果我使用View :: share,那么它的工作

// BaseController.php

//function called in the constructor
public function init()
{
    $envs = $this->game->environments()->get();

    View::share('test', $envs);

    View::composer('layouts.base', function($view)
    {
        $view->with('envs', $envs);
    });
}

// base.twig

//nothing output here, no error
{% for env in envs %}
         {{ env.name }}
{% endfor %}

//its work
{% for env in test %}
         {{ env.name }}
{% endfor %}

我是laravel的新手,所以也许我会错过一些东西?

1 个答案:

答案 0 :(得分:1)

我认为这不起作用的原因是因为您将View Composer放在代码中。 Laravel中的View Composers实际上是在呈现视图后立即执行的回调。这个init()函数定义在哪里?我的猜测是视图是在之前创建的你的视图编辑器被定义 - 意味着视图编辑器回调永远不会被执行。

尝试从init()函数移动整个视图编辑器块,并将其附加到routes.php文件的底部,看看它是否有效。如果您没有太多,那么放置您的视图作曲家并不是一个糟糕的地方,如果您这样做,您可以创建一个新类来存储它们并将该路径添加到您的自动加载路径。

详细了解视频作曲家here