我已经按照一些教程创建了一些全局助手函数,以便在blade视图中使用。
我在app\helpers文件夹中创建了viewhelpers.php文件。此文件包含以下代码:

<?php

class ViewHelpers {

    public static function bah()
    {
        echo 'blah';
    }
}

这是我的服务提供商,它加载我的助手(当前只有一个文件):
<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class HelperServiceProvider extends ServiceProvider {

    public function register()
    {
        foreach (glob(app_path().'/Helpers/*.php') as $filename){
            echo $filename; // for debugging - yes, I see it is getting called
            require_once($filename);
        }
    }
}

我已将其添加到“providers”部分的config\app.php中:
'App\Providers\HelperServiceProvider',

现在我在刀片视图中调用我的助手:
{{ViewHelpers::bah()}}

现在它工作得很好。
但如果我将viewhelper名称空间更改为:
<?php namespace App\Helpers;

class ViewHelpers {

  // omitted for brevity

我的观点因Class 'ViewHelpers' not found而失败。
如何使视图看到viewhelpers类,即使它位于不同的命名空间中?在哪里添加use App\Helpers
另一个相关的问题-我可以为viewhelpers类创建一个别名,使其在我的视图中看起来像VH:bah()吗?
如果可能的话,我更愿意用简单的方式来做(没有正面和其他什么),因为这些只是静态的助手,不需要类实例和ioc。
我用的是拉维5。

最佳答案

您将得到Class 'ViewHelpers' not found,因为没有ViewHelpers,有App\Helpers\ViewHelpers,您需要指定名称空间(即使在视图中)。
您可以在config/app.php中注册别名,这将允许您使用VH::something()

'aliases' => [
     // in the end just add:
    'VH' => 'App\Helpers\ViewHelpers'
],

如果您的名称空间是正确的,您甚至不必使用providers-class将由laravel加载。

10-07 14:08