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

时间:2016-12-11 14:23:02

标签: php laravel laravel-blade

我发现很奇怪的情况。我有一个带有一些结果的集合,我想抓取每个结果保存在缓存信息中。为此,我有一个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);
死();
 ?>
 @ endforeach
  




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





为什么会这样?




2 个答案:

答案 0 :(得分:0)

您可以使用cache()config()以及其他global helpers代替外墙来避免此类问题。

答案 1 :(得分:0)

在刀片模板内,您可以编写如下内容:

{{ $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。