AliasLoader в Laravel не обнаружил фасад

Я добавил собственный фасад в мой config/app.php в моем проекте laravel в разделе "aliases"

'GeoLocation' => '\App\Facades\GeoLocation',

Папка пользовательского класса находится в 'app/Facades/GeoLocation.php' и поставщик услуг в 'app/Providers/GeoLocationServiceProvider.php'

Как мне указать правильный псевдоним в app.php, чтобы правильно загрузить Фасад? Сообщение об ошибке:

ErrorException in AliasLoader.php line 63: Class 'Facades\GeoLocation' not found

Это мой фасад:

<?php namespace App\Facades;
use Illuminate\Support\Facades\Facade;

class GeoLocation extends Facade {
    protected static function getFacadeAccessor() { return 'geolocation'; }
}

Может ли быть так, что возвращаемое значение моего поставщика услуг неверно?

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class GeoLocationServiceProvider extends ServiceProvider {

    public function register() {

        \App::bind('geolocation', function()
        {
            return new GeoLocation;
        });
    }
}

Для теста я создал другого поставщика услуг с именем custom function:

<?php namespace App\Helpers;

class CustomFunction {
    //Generate random float between -1 and 1
    function f_rand($min = 0, $max = 1, $mul = 1000000) {
        if ($min>$max) return false;
        return mt_rand($min*$mul, $max*$mul) / $mul;
    }

    function test() {
        echo "OK";
    }
}

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class CustomFunctionServiceProvider extends ServiceProvider {

    public function register() {

        \App::bind('customfunctions', function()
        {
            return new CustomFunction;
        });
    }
}

1 ответ

Решение

Самый простой способ - изменить пространство имен на файл app/Facades/GeoLocation.php'на App\Facades;

затем обновите регистрацию псевдонима до

'GeoLocation' => 'App\Facades\GeoLocation',
Другие вопросы по тегам