Laravel 5.1自定义Facade停止工作


Laravel 5.1 Custom Facade Stopped Working

我正在尝试为我的Laravel 5.1.17应用程序制作自定义立面。我一步一步地遵循了Laravel文档和本教程,并且确实能够为我的自定义服务创建自定义Facade。

然而,它突然断了。我得到的错误信息是:

FatalErrorException in Facade.php line 207:
Call to undefined method App'Facades'BookLookUp::test()

换句话说,我的Facade没有被绑定,而Laravel正在寻找我的中间BookLookUp extends Facade类中的test()方法,而不是我预期的服务BookLookUp类。

很奇怪的是,它本来工作得很好,然后它就停止工作了。我所做的似乎使它破裂的是,我试图通过复制我的相关文件并切换名称来添加另一个Facade,但不知何故,我的原始Facade仍然未受影响,也停止了工作。

另一个相关的奇怪之处是,我试图从头开始为我的Facade重新创建所有必要的文件,它工作得很好,像新的一样。然后我去重命名Facade和相应的类/文件,然后它又崩溃了。

因此,操纵文件夹似乎会破坏一些东西,但这没有意义。我的正面不再工作有什么原因吗?

以下是我的相关文件:

应用程序/服务/BookLookUp.php

<?php
namespace App'Services;
class BookLookUp {
    public function test()
    {
        return "foo";
    }
}

应用程序/外观/BookLookUp.php

<?php
namespace App'Facades;
use Illuminate'Support'Facades'Facade;
class BookLookUp extends Facade
{
    protected static function getFacadeAccessor() 
    { 
        return 'BookLookUp'; 
    }
}

应用程序/供应商/BookLookUpServiceProvider.php

<?php
namespace App'Providers;
use App'Services'BookLookUp;
use Illuminate'Support'ServiceProvider;
class BookLookUpServiceProvider extends ServiceProvider
{
    /**
     * Indicates if loading of the provider is deferred.
     *
     * @var bool
     */
    protected $defer = true;
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton('BookLookUp', function() {
            return new BookLookUp();
        });
    }
     /**
     * Get the services provided by the provider.
     *
     * @return array
     */
    public function provides()
    {
        return ['App'Services'BookLookUp'];
    }
}

App/Http/Routes.php

<?php
Route::get('/', function() {
    return BookLookUp::test();
});

问题是我设置了protected $defer = true;,但我的provides()方法没有返回正确的值;相反,正确的返回值应该是return ['BookLookUp'],就像register方法返回BookLookUp一样。

至于为什么在操作文件时发生了变化,这是由于composer。绑定在调用composer update时被重置,所以在我操纵任何文件之前,它从未被调用过,并且看起来正在工作。一旦它被调用,它试图注册我现在提供的绑定,除了我在我的方法中有一个错误,就像我之前描述的,所以它永远无法正确定位我的BookLookUp类。