【问题标题】:Laravel: call static function inside blade templateLaravel:在刀片模板中调用静态函数
【发布时间】:2017-04-26 12:16:35
【问题描述】:

我发现很奇怪的情况。我有一个包含一些结果的集合,我想获取保存在缓存信息中的每个结果。为此,我有一个 Cache 类,它有一个静态函数 get()。不幸的是,当我在 Blade 模板的 foreach 循环中调用它时,我没有收到任何东西。

@foreach($prognoses as $sport_prognose)
    <?php
        $pr = Cache::get(Config::get('variables.cache.prediction'), ['id' => $sport_prognose['id']]);
        print_r($pr);
        die();
    ?>
@endforeach

如果我在 Controller 中调用相同的函数,则会向我显示所需的信息,但与上面的示例不同。

为什么会这样?

【问题讨论】:

    标签: php laravel laravel-blade


    【解决方案1】:

    您可以使用cache()config() 和其他global helpers 代替门面来避免此类问题。

    【讨论】:

    • 感谢@Alexey 的回复。 Cache 类是我的,所以我需要将其称为静态,但我已将 Config 更改为 config()->,但它仍然没有给我所需的信息。还有其他建议吗?
    • 如果 Cache 类是你的,请尝试使用完整的命名空间,例如 \App\My\Cache::get(...)
    【解决方案2】:

    在刀片模板中,你可以这样写:

    {{ $pc::getProducts($ship->products) }}
    

    注意变量的使用。显然 getProducts 是控制器内部的静态方法,而 $ship->products 是来自数组的变量。让我们简单点:假设 $ship->products 是 1,getProducts 是这样的:

     static function getProducts($id) { echo "id is $id; } 
    

    如果你运行这个脚本,你会得到一个错误,因为模板缺少 $pc 的值。你如何解决这个问题?您需要将 $this 的值传递给模板:

     return View::make('shipping.index')->with(['pc' => $this, 'shipping' => $shippings);
    

    这里 shipping.index 是模板,pc 得到一个 $this 的值,这使得 $pc 可以访问刀片模板中的 getProducts。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 2016-05-11
      • 2013-04-29
      • 2017-07-31
      • 2020-02-12
      相关资源
      最近更新 更多