[英]Why can't Laravel find my function but the IDE can?
我的 Laravel 项目的app
目录中有一个helpers.php
文件。 在这个文件中,我有一个 function 来检查项目的图像是否在存储文件中,如果不是,它将用未找到的图像替换它,这是文件:
function productImage($path)
{
return ($path != null) && file_exists('storage/' . $path) ? asset('storage/' . $path) : asset('img/error/img-not-found.jpg');
}
这是在我的一个刀片中调用它的地方blade.php
文件:
@foreach($products as $product)
<div class="product">
<a href="{{ route('shop.show', $product->slug) }}" class="linkToInfo">
<img src="{{ productImage($product->image) }}" alt="{{ $product->name }}" class="productImg">
<p class="productData">{{ $product->name }}</p>
<p class="productData">{{ $product->presentPrice() }}</p>
</a>
</div>
@endforeach
当我尝试加载此页面时,我收到此错误:
您需要注册(通过别名) class 或实例化它,以便刀片在编译时看到它。
在刀片内实例化:
{{ \App\Helpers::instance()->productImage($product->image) }}
或者,我通常所做的是在config\app.php中为您的助手class创建一个别名。 这也减少了一点开销和打字。
别名:
'aliases' => [
....
'Helpers' => App\Helpers::class
]
然后在刀片(或其他)文件中调用别名。
\Helpers::instance()->productImage($product->image);
我在 Helper class 中做了很多 static 函数,所以我不需要实例化它们。 例如\Helpers::productImage($product->image)
。 但上述方法也同样有效。
注意 class 上的上限:)
高温高压
如果要“按原样”使用 function(来自全局命名空间),则需要将 helpers.php 文件路径添加到 composer.Z466DEEC76ECDF5FCA6D38571F6Z 文件的autoload.files
部分,例如:
"autoload": {
"psr-4": {
...
}
"files": [
"app/helpers.php"
]
}
然后你应该从你的终端执行dump-autoload
命令来更新自动加载器:
composer dump-autoload
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.