我只是无法让我的立面在laravel 4中工作

时间:2013-11-14 22:27:36

标签: php laravel-4 facade

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

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

应用::使( '云') - >电流();似乎工作。

我已经学过几个教程,但我只是继续回到这个问题。

1 个答案:

答案 0 :(得分:1)

您的Facade使用的是与您的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

你应该好好去。