Laravel 如果使用命名空间,自定义视图助手将停止工作

Laravel custom view helpers stop working if using namespace

我按照一些教程创建了一些全局辅助函数以在 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);
        }
    }
}

我已将其添加到 config\app.php 的 'providers' 部分:

'App\Providers\HelperServiceProvider',

现在我在 blade 视图中调用助手:

{{ViewHelpers::bah()}}

目前它工作正常。

但是如果我将我的 ViewHelper 命名空间更改为:

<?php namespace App\Helpers;

class ViewHelpers {

  // omitted for brevity

我的观点因 Class 'ViewHelpers' not found 而失败。

如何让我的视图看到 ViewHelpers class,即使它在不同的命名空间中?我在哪里添加 use App\Helpers?

另一个相关问题 - 我可以为 ViewHelpers class 创建一个别名,让它看起来像我的视图中的 VH:bah() 吗?

如果可能的话(没有 Facades 什么的)我更愿意以简单的方式来做,因为这些只是静态助手,不需要 class 实例和 IoC。

我正在使用 Laravel 5。

你会得到Class 'ViewHelpers' not found,因为没有ViewHelpers,有App\Helpers\ViewHelpers,你需要指定命名空间(即使在视图中)。

您可以在 config/app.php 中注册别名,这样您就可以使用 VH::something():

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

如果您的命名空间正确,您甚至不必使用提供程序 - class 将由 Laravel 加载。