我试图为我的 Gravatar 库设置一个外观。
问题
我遇到的问题如下,ServiceProvider 没有注册。所以“gravatar”不在 IoC 中。
我添加\Log::info('initialized');
到我的 ServiceProvider 但没有记录任何内容。
错误
Call to undefined method Facade\Gravatar::getUrl()
我试图为我的 Gravatar 库设置一个外观。
我遇到的问题如下,ServiceProvider 没有注册。所以“gravatar”不在 IoC 中。
我添加\Log::info('initialized');
到我的 ServiceProvider 但没有记录任何内容。
Call to undefined method Facade\Gravatar::getUrl()
所以,一个门面需要(潜在的)三个类:
Gravatar::getUrl()
有关更多信息,请参见在 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
}
},
如果您对命名空间以及它如何与自动加载一起使用感到困惑,请阅读PSR-0。
希望有帮助!