我使用
在循环中包含多个模板@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
答案 0 :(得分:0)
您的假设是正确的,Laravel的视图系统确实为其加载的每个视图创建了一个新范围。包含视图时使用的Illuminate\View\Factory::make()
方法执行此操作:
new View($this, $this->getEngineFromPath($path), $view, $path, $data)
它创建了一个新视图并将数据传递给它,这实际上意味着它发送了一份信息。由于参数不存在passed by reference(已弃用,并且已删除较新的PHP版本),因此无法完成所需的操作。
话虽如此,你的方法似乎有缺陷。它看起来像你在视图中建立分页,这是你不应该在那里做的事情。 Laravel已经提供了一种非常简单的方法来创建Pagination,你或许应该研究一下。