繁体   English   中英

为什么 Laravel 找不到我的 function 但 IDE 可以?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM