我正在尝试为我的Gravatar库设置一个外观。
我遇到的问题如下,ServiceProvider没有注册。所以'gravatar'不在IoC中。
我将\Log::info('initialized');
添加到我的ServiceProvider中,但没有记录任何内容。
Call to undefined method Facade\Gravatar::getUrl()
答案 0 :(得分:3)
因此,Facade需要(潜在)三个类:
Gravatar::getUrl()
请参阅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。
希望有所帮助!