【问题标题】:Laravel blade global variableLaravel 刀片全局变量
【发布时间】:2017-02-24 10:21:39
【问题描述】:

我在 laravel 中的全局变量有问题。我知道视图作曲家,我的问题与该主题无关。 如何在 laravel view (*.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 为空”而不是“我的 var 值”。 有人知道为什么会这样吗?

【问题讨论】:

  • 首先,为什么你需要在你的刀片中运行php?我在一些观点中使用它没有问题&lt;? php ?&gt;
  • @Sachith 我只是想简化问题,我必须在我的项目中使用这个php 代码主要问题是 global 关键字它不能按预期工作.

标签: php laravel blade


【解决方案1】:

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    最后我找到了答案,它有范围问题。因为 laravel 使用类和方法来检索 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();
    

    【讨论】:

      【解决方案3】:

      最好的解决方案是使用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();
      

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

      【讨论】:

      • 看起来不错,但不适合我的情况。我只是想解决这个问题,因为我必须使用之前创建的函数。
      • 但这与使用“全局”的方式相同,对吧?我真的不明白为什么使用 Config 方式不是您想要的?请赐教!顺便说一句,你不应该在 Blade 中使用它,这是不好的做法。
      • 我必须为我的公司集成 wordpress 和 laravel,并且我想在我的网站的某些部分使用可视化作曲家。我唯一的问题就是这个。
      • 好的,很清楚。您的问题可能是因为 Laravel 在您的自动加载器中使用了多个命名空间。以下链接描述了更多可能的解决方案,尽管我不确定这是否适合您的情况:stackoverflow.com/questions/8374947/…
      猜你喜欢
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 2013-02-25
      • 2017-06-17
      • 2022-11-11
      • 2019-02-19
      • 2016-09-18
      • 2020-01-24
      相关资源
      最近更新 更多