Laravel刀片全局变量

时间:2016-10-14 21:41:02

标签: php laravel blade

我在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();

在执行结束时,它显示“我的var为空”&#39;而不是我的var值&#39;。 有人知道为什么会这样吗?

3 个答案:

答案 0 :(得分:0)

最佳解决方案是使用Config外观。您可以创建一个新的配置文件,并在您的情况下静态设置全局变量。但是这个外观的最佳功能是get()set()方法,它们允许您动态定义这些变量。请参阅:Set Global variables in Laravel 5

在你的情况下:

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

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

确保使用文件顶部的Config导入use外观。

答案 1 :(得分:0)

最后我找到了答案,它有范围问题。因为laravel使用类和方法来检索视图所以基于此页面信息: 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();

答案 2 :(得分:0)

在Laravel中,您可以通过在主视图和子视图中将希望传递值的变量声明为全局变量,从而将值从包含的子叶片传递到主叶片。关键是在两端(即在主刀片和附带刀片中)将传递变量声明为全局变量。

例如:

内嵌子刀片

<? 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

主刀

<? 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 -->

希望这会有所帮助。