Laravel Facade类没有加载根类,而是返回找不到的方法

时间:2014-09-11 16:54:47

标签: php laravel facade

我试图让我的Facade类工作,但是看起来Laravel在我的Facade类上调用方法而不是在我的根类上调用它。所以我得到方法无法解释的错误。当我直接从绑定创建feed类时(App :: make('feed') - > addArticle();)它可以正常工作。所以我认为我的Facade有一些东西。有任何想法吗?提前谢谢。

控制器

class RssController extends BaseController 
{

    public function getArticles() {
         Feed::addArticle();
    }
}

的ServiceProvider

use Illuminate\Support\ServiceProvider;



class FeedServiceProvider extends ServiceProvider  {    
    public function register()
    {
        $this->app->bind('feed', function()
        {
            return new Feed;
        });
    }
}

门面课

use Illuminate\Support\Facades\Facade;

class FeedFacade extends Facade {

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

}

Root Class

class Feed {

//vars


    public function __construct()
    {

    }

    public function make() {
        return new Feed();
    }

    public function addArticle() {
        return '@addArticle';

    }

1 个答案:

答案 0 :(得分:3)

问题似乎是您希望Laravel Facade(Feed::)和服务提供者的实现类(class Feed)具有相同的名称。外观起作用,因为在app/config/app.php中有一个别名部分

'aliases' => array(
    'App'             => 'Illuminate\Support\Facades\App',
    'Artisan'         => 'Illuminate\Support\Facades\Artisan',
    'Auth'            => 'Illuminate\Support\Facades\Auth',
    'Blade'           => 'Illuminate\Support\Facades\Blade',

这种别​​名意味着每当您使用App外观

`App::someMethod`

Laravel实际上会在getFacadeAccessor上调用Illuminate\Support\Facades\App。系统中没有全局类App。如果有,它会导致与门面类似的问题。

获取Feed => Illuminate\Support\Facades\Facade\FeedFacade的别名到您的系统中,并从全局命名空间中获取实现类Feed(将文件移动到适当的位置)

<?php
namespace My\Namespace;
class Feed
{
}

...

return new \My\Namespace\Feed;

你应该全力以赴。

此外,冒着让您感到困惑的风险,您不需要在Illuminate\Etc\...命名空间中删除自己的课程,除非您尝试将其放在自己的名称中,否则您应该将它们放在自己的让Laravel核心团队接受您的课程作为官方饲料服务。