Выпуск сервисного контейнера - PullRequest
0 голосов
/ 26 октября 2018

Я смотрел видео курс laravel, в нем демонстрировалось использование сервисного контейнера в web.php (просто в качестве примера), а в web.php он работает без проблем:

interface KekInterface {};
class Kek implements KekInterface {};
app()->bind('KekInterface', function() { 
    return new Kek;    
});
Route::get('/', function(KekInterface $kekat) {
    dd($kekat);
});

Я решил переместить весь свой код в контроллер (класс контроллера):

public function index(KekInterface $api)
{
    dd($api);
}

Интерфейс и класс:

interface KekInterface {};
class Kek implements KekInterface {};
app()->bind('KekInterface', function() { 
    return new Kek;    
});

А потом Ларавел вскрикнул:

Цель [App \ Http \ Controllers \ KekInterface] не может быть создана.

Я не знаю, в чем причина проблемы, но я думаю, это просто пространства имен

1 Ответ

0 голосов
/ 26 октября 2018

Это связано с тем, что привязка должна выполняться внутри поставщика услуг .

Поместить часть кода app()->bind(...) в метод register класса App\Providers\AppServiceProvider:

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    app()->bind(\Full\Namespace\To\KekInterface::class, function() {
        return new \Full\Namespace\To\Kek();
    })
}

Обратите внимание, что KekInterface и Kek должны находиться внутри разных файлов, названных по имени класса, внутри правой папки в соответствии с требуемым пространством имен.

См. Laravel Service Container docs для лучшего понимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...