1

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

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

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

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

非常奇怪的是它工作得很好,然后就停止了工作。我所做的似乎让它崩溃的是我试图通过复制我的相关文件并只是切换名称来添加另一个外观,但不知何故我原来的外观保持不变也停止工作。

另一个相关的奇怪之处是我试图从头开始为我的 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'];
    }
}

应用程序/Http/Routes.php

<?php

Route::get('/', function() {
    return BookLookUp::test();
});
4

1 回答 1

1

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

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

于 2015-10-16T13:18:14.370 回答