如何通过参考刀片模板中的@include传递变量?

时间:2014-08-22 00:28:18

标签: php laravel-4 blade

在Laravel 4.2设置中,我在模板中有一个变量,我希望在多个包含中共享:

master.blade

<?php $tabindex = 0; ?>{{--This is the variable--}}
@include('header'){{-- <-in header.blade, I often use ++$tabindex --}}
{{--$tabindex is still 0--}}
@include('content'){{-- <-in content.blade, I often use ++$tabindex --}}
{{--$tabindex is still 0--}}
@include('footer'){{-- <-in footer.blade, I often use ++$tabindex --}}
{{--$tabindex is still 0--}}

$tabindex如果用作tabindex html属性显然是一个简单的例子,我可以使用安全值和足够大的缓冲区值来解决这个问题,但这不是优雅的,也不是解决实际问题的方法。在regular php includes中,我理解包含文件中的变量赋值会影响包含文件中的变量 - 这是期望的效果。

我尝试了View::share(),但它出现了相同的症状。将值作为数组传递给@include显然是通过值传递并产生相同的效果。

似乎首先完整地评估包含范围值,然后是包含的范围。如果是这种情况,如果在包含范围中有任何用法或者进一步包含范围(甚至通过某些持久存储器存储),那么它将使我正在尝试做的更不可行,因为执行的顺序会有所不同而不是代码中的顺序。

是否存在一些未记录的刀片巫术,以防止刀片@include切断其改变其包含者变量的值,或者我必须依靠直接的php include或其他一些丑陋的替代品({ {1}}变量应该在调用include范围内保持它们的值,但这只是一个讨厌和脆弱的方法吗?

3 个答案:

答案 0 :(得分:6)

使用,

@include('view', array('key'=>'value')) 

将是最好的方式。

答案 1 :(得分:0)

我从你所说的那里得到它,你一直在做这样的事情。

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

也许在模板中初始化变量。不鼓励这种做法,但还有另一种方法可以做到这一点,即在php文件中初始化变量并通过将此行添加到文件中来共享它。

$some_variable = 0;  //Initialize it any way you need to.
View::share('some_variable', $some_variable);

然后在你的app / start / global.php中添加这一行。

require app_path().'/composers.php';

答案 2 :(得分:0)

Laravel刀片似乎为您添加的每个包含的模板创建了一个可变范围。

View:share('name', $value)

与您想要的不同,它旨在为每个呈现的模板注入一些任意变量,它可用于在控制器的引导程序或入口点定义资产路径。

要解决您的问题,只需告诉包含范围内的php,通过global查找上面的变量,main.blade.php

<?php $tabIndex = 0 ?>
@include('subform');

并在模板subform.blade.php

<?php 
    global $tabindex;
    $tabindex++;
?>

注意,如果您不在主模板中定义变量,这可能不起作用,我只在主模板(我在控制器中渲染到的模板)中尝试了这个并且它有效。