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()