我正在尝试为我的 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();
});