Laravel-4中的Facade和服务提供商问题

时间:2013-08-22 19:45:33

标签: php laravel laravel-4 facade service-provider

我正在尝试在laravel-4中为自定义构建的类设置Facade。但是,当我尝试加载我的网站时,我收到一个错误,其中包含

Class 'PlaneSaleing\ResizerServiceProvider' not found

我已按照此处的教程进行操作:http://fideloper.com/create-facade-laravel-4

我的自定义类名为Resizer.php,保存在laravel\app\library\中,如下所示:

<?php

namespace PlaneSaleing;

class Resizer {
    // My custom methods
}

然后我创建了一个名为ResizerFacade.php的Facade,保存在同一个文件夹中,它看起来像这样:

<?php

namespace PlaneSaleing\Facades;

use Illuminate\Support\Facades\Facade;

class Resizer extends Facade {

    protected static function getFacadeAccessor() { return 'resizer'; }

}

第三,我创建了一个ResizerServiceProvider.php文件,并将其保存在同一个文件夹中,如下所示:

<?php

namespace PlaneSaleing;

use Illuminate\Support\ServiceProvider;

class ResizerServiceProvider extends ServiceProvider {

    public function register()
    {
        // Register 'resizer' instance container to our UnderlyingClass object
        $this->app['resizer'] = $this->app->share(function($app)
        {
            return new Resizer;
        });

        // Shortcut so developers don't need to add an Alias in app/config/app.php
        $this->app->booting(function()
        {
            $loader = AliasLoader::getInstance();
            $loader->alias('Resizer', 'PlaneSaleing\Facades\Resizer');
        });
    }
}

最后,我已将以下行添加到'providers' => array (...)文件

中的laravel/config/app.php
'PlaneSaleing\ResizerServiceProvider',

任何帮助,非常感谢

1 个答案:

答案 0 :(得分:4)

您必须将app / library添加到composer autoload路径,然后使用artisan dump-auto重新生成自动加载器。

您收到的第二个错误(Class&#39; PlaneSaleing \ AliasLoader&#39;未找到)是因为ResizerServiceProvider类位于PlaneSaleing命名空间中,并且此类尝试调用不同的AliasLoader命名空间。

您只需在AliasLoader前面添加一个\来指定它在主命名空间而不是当前命名空间中。