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
变量应该坚持他们的值调用包括范围,但这只是一个令人讨厌和脆弱的方法)?
我从你的话中得知,你一直在做这样的事情。
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)