Laravel blade 全局变量

Laravel blade global variable

我在 laravel 中的全局变量中遇到问题。我知道视图作曲家,我的问题与该主题无关。 如何在 laravel 视图 (*.blade.php | .php) 模板引擎中做这么简单的事情? 例如,这是我的一个观点的示例代码 (.blade.php | *.php):

<?php
   function myFunc() {
     global $myvar;
     if ( ! $myvar ) {
       $myvar = 'my var is empty';
     }
     dd( $myvar );
   }

  $myvar = 'my var value';
  myFunc();

在执行结束时它显示 'my var is empty' 而不是 'my var value'。 有人知道为什么会这样吗?

最好的解决方案是使用 Config 门面。您可以创建一个新的配置文件,并在您的情况下静态设置全局变量。但是这个外观的最佳特性是 get()set() 方法,它们允许您动态定义这些变量。参见:

你的情况:

<?php
function myFunc() {
 $myvar = Config::get('vars.myvar');
 if ( ! $myvar ) {
   $myvar = 'my var is empty';
 }
 dd( $myvar );
}

Config::set('vars.myvar');
myFunc();

确保使用文件顶部的 use 导入 Config 门面。

我终于找到了答案,它有范围问题。因为 laravel 使用 class 和方法来检索 view 所以基于此页面信息: http://php.net/manual/en/language.variables.scope.php#98811

所以我们可以这样写代码:

<?php
   function myFunc() {
     global $myvar;
     if ( ! $myvar ) {
       $myvar = 'my var is empty';
     }
     dd( $myvar );
   }

  global $myvar; // This line is the key
  $myvar = 'my var value';
  myFunc();

在 Laravel 中,您可以将值从包含的 sub-blade 传递到主 blade,方法是在主视图和子视图中声明您希望传递值的变量为全局变量.关键是在两端都将传递变量声明为全局变量(即,在主要和包含 blade 中)。

例如:

已包含 SUB-BLADE

<? global $monetary_total; ?> <!-- somewhere up top of your sub-blade declare your variable as global scope  -->

@foreach ($monetary_assets_joint as $monetary_asset)

.... your code that cycles through rows and pulls a value...

<td>{{$monetary_asset->monetary_asset_value}} </td> <!-- somewhere you'll display the pulled values -->

... rest of your view code and markup ....

<?php $monetary_total += $monetary_asset->monetary_asset_value; //summing up pulled row value into passing variable ?>  

@endforeach

主要BLADE:

<? global $monetary_total; ?> <!-- somewhere up top of your blade declare your variable as global scope  -->

...

@include('partials.sub_blade') <!--  somewhere you include your sub-blade -->

...

{{$monetary_total}}  <!-- display summed total from included sub-bade's rows -->

希望对您有所帮助。