Я пытаюсь сделать пользовательские фасады для моего приложения Laravel 5.1.17. Я следил за Laravel documentation, а также this tutorial шаг за шагом, и действительно, мне удалось создать собственный фасад для моей пользовательской службы.Laravel 5.1 Пользовательский фасад остановлен Работа
Однако внезапно это сломалось. Сообщение об ошибке я получаю:
FatalErrorException in Facade.php line 207:
Call to undefined method App\Facades\BookLookUp::test()
Другими словами, мой фасад не получает связаны, и вместо Laravel ищет метод test()
в моем посреднической BookLookUp extends Facade
класса, а не моей предполагаемой службы BookLookUp
класса.
Очень странно, что он работал отлично, а затем он просто прекратил работать. То, что я сделал, которое, похоже, заставило его сломаться, я попытался добавить еще один Фасад, дублируя мои соответствующие файлы и просто меняя имена, но каким-то образом мой оригинальный Фасад, который остался нетронутым, также переставал работать.
Другая связанная странность была я пытался воссоздать с нуля все необходимые файлы для моего фасада, и это сработало, как новое. Затем я пошел и переименовал Фасад и соответствующие классы/файлы, и он снова сломался.
Таким образом, кажется, что манипулирование папкой так или иначе разрушает вещи, но это не имеет смысла. Есть ли причина, по которой мои Фасады больше не работают?
Ниже приведены мои соответствующие файлы:
App/Услуги/BookLookUp.php
<?php
namespace App\Services;
class BookLookUp {
public function test()
{
return "foo";
}
}
App/Фасады/BookLookUp.php
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class BookLookUp extends Facade
{
protected static function getFacadeAccessor()
{
return 'BookLookUp';
}
}
App/Провайдеры/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();
});
ИМЕЕТ ТОЧНУЮ ТОЧНУЮ проблему. Фасад работал правильно в Тинкере, но я не мог понять всю жизнь, почему это было не тогда, когда я позвонил в php-файл (например, контроллер). Спасибо за этот пост! – edc598