1

请有人告诉我为什么我的第一个自制门面不起作用。我在这上面花了几个小时,我可能会发疯。

composer.js 包含

    "classmap": [
        "app/commands",
        "app/controllers",
        "app/facades",
        "app/libraries",
        ....

/app/config/app.php 包含

'providers' => array(
    ....
    'CloudsServiceProvider',

/libraries/Clouds.php

class Clouds {

    protected $_current = null;

    public function current() 
    {

        if($this->_current)
            return $this->_current;

        $this->_current = Cloud::find(1); // Cloud in a Model 

        return $this->_current;
    }

}

/libraries/CloudsServiceProvider.php

use Illuminate\Support\ServiceProvider;

class CloudsServiceProvider extends ServiceProvider 
{

    public function register()
    {

        $this->app->bind('Clouds', function()
        {
            return new Clouds();
        });
    }
} 

/facades/CloudsFacade.php

use Illuminate\Support\Facades\Facade;

class Clouds extends Facade 
{

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

}

在终端我做:

composer dump

当我调用 $cloud = Clouds::current(); 我得到:

Non-static method Clouds::current() should not be called statically, assuming $this from incompatible context

App::make('云')->current(); 似乎工作。

我已经遵循了一些教程,但我只是不断地回到这个问题。

4

1 回答 1

1

您的外观使用与 Clouds 类相同的名称,您应该更改为:

class CloudsFacade extends Facade 
{
   ...
}

提示:打开您的 vendor/composer/autoload_classmap.php,所有 3 个文件都必须在此处列出。

此外,您必须命名所有 3 个文件:

<?php namespace App\Clouds;

添加到您的提供商:

'App\Clouds\CloudsServiceProvider',

和别名:

'Clouds' => 'App\Clouds\CloudsFacade',

然后你

composer du

你应该很高兴。

于 2013-11-14T22:48:00.510 回答