Laravel - 从@include 修改和返回变量

Posted

技术标签:

【中文标题】Laravel - 从@include 修改和返回变量【英文标题】:Laravel - Modify and return variable from @include 【发布时间】:2015-08-18 23:16:46 【问题描述】:

我通过使用在一个循环中包含多个模板

@include('template.included')

在包含这个模板之前我定义了

$page = 0;

在模板内部,多次调用

$page++;

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

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

感谢任何建议!

编辑:

我的问题,例如:

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

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

【问题讨论】:

我在模板中访问变量没有问题,但是我希望我在包含的文件中所做的更改以更新模板外的变量。我将添加另一个示例的编辑以希望使其更清晰 【参考方案1】:

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

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

它正在创建一个新视图并将数据传递给它,这实际上意味着它正在发送信息的副本。由于没有 passed by reference 的参数(它已被弃用,并且在较新的 php 版本中已被删除),所以您想要的无法完成。

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

【讨论】:

以上是关于Laravel - 从@include 修改和返回变量的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 请求在验证失败时不返回修改后的请求

你如何从 Laravel 的包中扩展视图?

Laravel 4 Blade @include 变量

限制从 Laravel Eloquent 中连接的表/模型返回的字段

Laravel/Php - 在急切加载关闭中修改集合?

Laravel API 资源集合从其他资源返回特定字段