新创建的外观不适用于laravel4

时间:2014-04-02 14:48:35

标签: php laravel laravel-4

我有一个名为Messaging的类,我创建了一个使用它的外观,如

Messaging::getConversationMessages($conv_id, $user_id);

我已按照以下链接中的所有说明进行操作

How do I create a facade class with Laravel?

这是我的MessagingServiceProvider calss,下面是绑定

<?php
use Illuminate\Support\ServiceProvider;

class MessagingServiceProvider extends ServiceProvider {
/**
 * Register the service provider.
 *
 * @return void
 */
public function register() {
    App::bind('messaging', function()
    {
        return new \Messaging\Messaging;
    }
    );
}

}

下面是我为我创建的Facade类,以我想要的方式使用它

<?php 

use Illuminate\Support\Facades\Facade;

class Messaging extends Facade
{

/**
 * Get the registered name of the component.
 *
 * @return string
 */
protected static function getFacadeAccessor() { return 'messaging'; }

}

我已将MessagingServiceProvider.php放在app app文件夹中名为serviceproviders的文件夹中,并将messaging.php(包含facade类的文件)放在app文件夹中名为facade的文件夹中,并将它们添加到自动加载。 / p>

下面是门面的模型类

<?php
namespace Messaging;

use Eloquent; // if you're extending Eloquent

class Messaging extends Eloquent {
    ...
}

完成所有这些之后我仍然收到错误“非静态方法Messaging \ Messaging :: getConversationMessages()不应该静态调用,假设$ this来自不兼容的上下文”

1 个答案:

答案 0 :(得分:0)

您没有使用Facade。尝试命名它并使用不同的名称:

<?php namespace Messaging;

use Illuminate\Support\Facades\Facade;

class MessagingFacade extends Facade
{
   ...
}

然后你

composer dumpautoload

尝试以这种方式使用它:

Messaging\MessagingFacade::getConversationMessages()

如果它适用于您,则可以在app/config/app.php中为其创建别名。

'Messaging' => 'Messaging\MessagingFacade',

你应该能够将它用作:

Messaging::getConversationMessages()

关于命名空间类,每次需要来自另一个命名空间的类时,都需要root:

\DB::whatever();