Laravel 4 Blade @include 变量

Posted

技术标签:

【中文标题】Laravel 4 Blade @include 变量【英文标题】:Laravel 4 Blade @include variable 【发布时间】:2014-02-06 13:50:43 【问题描述】:

我试图用 Laravel 刀片做include,但问题是它不能传递变量。这是我的示例代码:

file_include.blade.php

<?php
  $myvar = "some text";

main.blade.php

@include('file_include')
$myvar

当我运行文件时,它返回错误“未定义的变量:myvar”。那么,如何将变量从包含文件传递到主文件?

谢谢。

【问题讨论】:

@include 用于包含子视图,不应该用于以这种方式加载变量。请记住,这些是刀片模板,而不是常规的 php 文件。 【参考方案1】:

如果你真的想改变你的变量,我建议你做一个经典的 PHP 要求(然后它会自动通过引用)

【讨论】:

【参考方案2】:

不幸的是,Laravel Blade 引擎不支持你所期望的!但是你可以通过一些传统的方式来实现它!

解决方案 1 - 没有 Laravel Blade Engine

步骤一:

来自

file_include.blade.php

file_include.php

步骤 b:

main.blade.php

<?php 
     include('app/views/file_include.php')
?>
$myvar

解决方案 2Laravel Blade Engine

routes.php

$data = array(
'data1'         => "one",
'data2'         => "two",
);

View::share('data', $data); 

像这样从Any View 访问 $data 数组

 $data['data1'] 

输出

one

【讨论】:

【参考方案3】:

我认为你必须了解 Laravel Blade 模板中的变量作用域。包含使用@include 的模板将从其父视图(定义它的视图)继承所有变量。但我猜你不能在父范围的子视图中使用你定义的变量。如果您希望您的变量对父级可用,请尝试使用View::share($variableName, $variableValue),它将按预期对所有视图可用。

【讨论】:

【参考方案4】:

为什么要将它从包含传递到调用模板?如果您在调用模板中需要它,请在此处创建它,然后将其传递到包含的模板中,如下所示:

@include('view.name', array('some'=>'data'))

以上代码来自http://laravel.com/docs/templates的sn-p

【讨论】:

不幸的是,如果您需要从不同的页面获取变量,这不是解决方案!请检查我的答案,你会明白我的意思 好点。我的回答并没有真正解决实际问题。相反,我提供了一个不涉及传递变量的解决方案。但是,如果需要传入一个变量,您的解决方案非常适合!【参考方案5】:

Blade 是 Laravel 的模板引擎。所以尝试从控制器传递值,或者您可以在 routes.php 中定义它以进行测试。

@include 用于包含子视图。

【讨论】:

【参考方案6】:

在这种情况下,$myvar 将仅在包含调用的本地范围内可用。

为什么不直接从控制器发送变量?

【讨论】:

以上是关于Laravel 4 Blade @include 变量的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - Blade:@include 一个带有自动“文件名注释”的模板

@include Laravel Blade 模板以使用 Javascript 追加

Laravel - blade 基础语法和include的使用

Laravel Blade 模板部分重复/缓存错误

Laravel 4 Blade 模板文档

1+X web中级 Laravel学习笔记——blade模版