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

sko*_*cs1 4 php blade laravel-4

在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--}}
Run Code Online (Sandbox Code Playgroud)

$tabindex如果用作tabindex html属性显然是一个简单的例子,我可以使用安全值和足够大的缓冲区值来解决这个问题,但这并不是优雅或解决手头的实际问题.在常规的php包含中,我的理解是包含文件中的变量赋值会影响包含文件中的变量 - 这是所需的效果.

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

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

是否有一些未记录的刀片巫术,以防止刀片@include切断其改变其包含变量的值,或者我必须回到直接的PHP include或其他一些丑陋的替代品(Session变量应该坚持他们的值调用包括范围,但这只是一个令人讨厌和脆弱的方法)?

小智 7

使用,

@include('view', array('key'=>'value')) 
Run Code Online (Sandbox Code Playgroud)

将是最好的方式.


arr*_*nfr 0

我从你的话中得知,你一直在做这样的事情。

View::share('some_variable',$some_variable);
Run Code Online (Sandbox Code Playgroud)

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

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

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

require app_path().'/composers.php';
Run Code Online (Sandbox Code Playgroud)