繁体   English   中英

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

[英]How to pass variables by reference to @include in a blade template?

在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属性显然是一个简单的例子,我可以使用安全值和足够大的缓冲区值来解决这个问题,但这并不是优雅或解决实际问题。 常规的php包含中 ,我的理解是包含文件中的变量赋值会影响包含文件中的变量 - 这是所需的效果。

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

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

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

使用,

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

将是最好的方式。

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

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';

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

View:share('name', $value)

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

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

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

并在模板subform.blade.php

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM