【问题标题】:Laravel custom Facades class not workingLaravel 自定义 Facades 类不起作用
【发布时间】:2015-05-04 09:12:16
【问题描述】:

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

应用程序/Latheesan

这已添加到我的composer.json,如下所示:

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

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

为此,我创建了以下文件夹和文件:

在相应的文件中使用以下代码:

app/Latheesan/System/Helpers/Facades/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'; }

}

app/Latheesan/System/Helpers/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';
    }

}

app/Latheesan/System/Helpers/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”

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

【问题讨论】:

  • 你的外观文件有命名空间Latheesan\System\Helpers,但缺少Facades
  • 谢谢,现在我得到一个不同的错误:Cannot redeclare class Latheesan\System\Helpers\Facades\Helpers
  • 忽略我之前的评论。进行更改后,我必须运行 composer dump-auto 并解决了问题。一切都很好。感谢您的帮助。
  • 请回答您的问题,也许其他用户会得到帮助。
  • @Luceos 好的,我现在已经发布了答案。

标签: php laravel laravel-4


【解决方案1】:

感谢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,一切正常。

【讨论】:

    猜你喜欢
    • 2015-02-07
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 2021-08-02
    相关资源
    最近更新 更多