Laravel:在刀片模板中调用静态函数

Posted

技术标签:

【中文标题】Laravel:在刀片模板中调用静态函数【英文标题】:Laravel: call static function inside blade template 【发布时间】: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 中调用相同的函数,则会向我显示所需的信息,但与上面的示例不同。

为什么会这样?

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于Laravel:在刀片模板中调用静态函数的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5使用刀片模板在视图中调用函数时如何使用参数

Laravel 刀片模板不起作用 - 调用未定义的函数 Illuminate\View\Compilers\token_get_all()

我可以从Laravel刀片模板登录吗?

Laravel 5 在刀片视图中调用模型函数

从(Laravel 8)Blade 模板文件调用函数

如何使用 laravel 别名调用非静态方法