Laravel - 修改并返回@include中的变量

时间:2015-06-04 11:06:44

标签: php laravel laravel-4

我使用

在循环中包含多个模板
@include('template.included')

在包含此模板之前,我定义了

$page = 0;

并在模板内部多次调用

$page++;

在包含的模板中,值正确递增,但是在模板之外,似乎$ page变量保持不变 - 看起来像@include创建了它自己使用的每个变量的副本。

我需要这个$ page变量从这些模板中更新,并将它的值返回给我的主模板 - 我错过了一些简单的东西吗?

感谢任何建议!

编辑:

我的问题,例如:

$page = 0;
@include('template.included') //This calls $page++ 5 times
echo $page; //returns 0

我需要$ page返回4,而不是0

1 个答案:

答案 0 :(得分:0)

您的假设是正确的,Laravel的视图系统确实为其加载的每个视图创建了一个新范围。包含视图时使用的Illuminate\View\Factory::make()方法执行此操作:

new View($this, $this->getEngineFromPath($path), $view, $path, $data)

它创建了一个新视图并将数据传递给它,这实际上意味着它发送了一份信息。由于参数不存在passed by reference(已弃用,并且已删除较新的PHP版本),因此无法完成所需的操作。

话虽如此,你的方法似乎有缺陷。它看起来像你在视图中建立分页,这是你不应该在那里做的事情。 Laravel已经提供了一种非常简单的方法来创建Pagination,你或许应该研究一下。