ServiceProvider未加载

时间:2013-07-09 14:23:58

标签: php laravel laravel-4

我正在尝试为我的Gravatar库设置一个外观。

问题

我遇到的问题如下,ServiceProvider没有注册。所以'gravatar'不在IoC中。

我将\Log::info('initialized');添加到我的ServiceProvider中,但没有记录任何内容。

错误

Call to undefined method Facade\Gravatar::getUrl()

代码

http://paste.laravel.com/AgO

1 个答案:

答案 0 :(得分:3)

因此,Facade需要(潜在)三个类:

  1. 包含您将使用的方法的类,在本例中为Gravatar::getUrl()
  2. Facade类告诉Laravel在第1点找到该类的位置
  3. ServiceProvider,通过$ app容器创建带有方法的类。
  4. 请参阅creating facades in Laravel上的详细信息。

    在您的情况下,我没有看到第1点的代码。

    班级

    库/的Gravatar / Avatar.php

    <?php namespace Gravatar;
    
    class Avatar {
    
        public function getUrl() { ...  }
    
    }
    

    门面

    库/的Gravatar / Facade.php

    <?php namespace Gravatar;
    
    use Illuminate\Support\Facades\Facade as BaseFacade;
    
    class Facade extends BaseFacade {
    
        protected static function getFacadeAccessor() {
        return 'gravatar';
    }
    
    }
    

    服务提供商

    库/的Gravatar / GravatarServiceProvider.php

    <?php namespace Gravatar;
    
    use Illuminate\Support\ServiceProvider
    
    class GravatarServiceProvider extends ServiceProvider {
    
        public function register() {
        Log::info('initialized');
        $this->app['gravatar'] = $this->app->share(function () {
            return new Avatar();
        });
    }
    
    }
    

    app/config/app.php

    中绑在一起
    <?php
    'providers' => array(
    ...
    'Gravatar\GravatarServiceProvider'
    ),
    'aliases' => array(
    ...
    'Gravatar'        => 'Gravatar\Facade'
    ),
    

    注意

    请注意,我使用的命名空间假设了这个目录结构:

    Libraries
        Gravatar
            Avatar.php
            GravatarServiceProvider.php
            Facade.php
    

    composer.json

    中进行自动加载
    "autoload": {
        "classmap": [
            "app/commands",
            "app/controllers",
            "app/models",
            "app/database/migrations",
            "app/tests/TestCase.php"
        ],
        "psr-0": {
            "Gravatar": "app/Library" // Or wherever your Library directory is
        }
    },
    

    如果您对Namespacing以及如何使用自动加载感到困惑,请阅读PSR-0

    希望有所帮助!