Laravel定制Facades类无法正常工作

时间:2015-03-03 16:12:44

标签: php laravel laravel-4

我的laravel-4应用程序中有以下目录:

应用/ Latheesan

这已添加到我的composer.json中:

"autoload": {
    ...
    "psr-0": {
        "Latheesan": "app/"
    }
    ...
},

鉴于这个设置,我想创建一个名为 Helpers 的自定义Facade类,以便我可以将它用于我的应用程序中的各种操作,例如Helpers::getFreeStock();

为实现这一目标,我创建了以下文件夹&文件:

enter image description here

在相应的文件中包含以下代码:

应用/ Latheesan /系统/助手/墙面/ Helpers.php

<?php namespace Latheesan\System\Helpers;

use Illuminate\Support\Facades\Facade;

class Helpers extends Facade {

    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor() { return 'helpers'; }

}

应用/ Latheesan /系统/助手/ Helpers.php

<?php namespace Latheesan\System\Helpers;

class Helpers {

    /**
     * Get free stock levels by organisation id.
     * If param $skus is empty, free stock will be calculated for every inventory organisation owns.
     *
     * @param $organisation_id
     * @param array $skus
     * @return array
     */
    public function getFreeStock($organisation_id, $skus = [])
    {
        return 'hello world - todo actual implementation';
    }

}

应用/ Latheesan /系统/助手/ HelpersServiceProvider.php

<?php namespace Latheesan\System\Helpers;

use Illuminate\Support\ServiceProvider;

class HelpersServiceProvider extends ServiceProvider {

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->app['helpers'] = $this->app->share(function($app)
        {
            return new Helpers;
        });
    }

}

现在我更新了 app / config / app.php ,如下所示:

// Add service provider
'Latheesan\System\Helpers\HelpersServiceProvider'

...

// Create alias
'Helpers' => 'Latheesan\System\Helpers\Facades\Helpers'

最后,为了测试这个,我创建了以下路线:

Route::get('/test', function() {
    dd(Helpers::getFreeStock(1, ['vcf001']));
});

当我访问此/test以测试帮助程序Facade类时,我收到以下错误:

未找到类'Latheesan \ System \ Helpers \ Facades \ Helpers

我在这里做错了什么?知道为什么这不起作用吗?

1 个答案:

答案 0 :(得分:0)

感谢Luceos,我解决了这个问题。我在 app / Latheesan / System / Helpers / Facades / Helpers.php 文件中的命名空间中输入了一个拼写错误。

正确的代码应该是这样的:

<?php namespace Latheesan\System\Helpers\Facades;

use Illuminate\Support\Facades\Facade;

class Helpers extends Facade {

    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor() { return 'helpers'; }

}

更改后,我必须运行 composer dump-auto ,一切运行良好。