Цель Laravel 5 не является инстанцируемой

Несколько вопросов уже задавалось по этой теме, но у меня все еще есть эта проблема, и я понятия не имею, в чем проблема.

Я хочу добиться того, чтобы я мог создать экземпляр интерфейса вместо реализации.

Я использую Laravel 5, это код / ​​структура:

В приложении я создал папку Contracts. В этой папке у меня есть Messenger.php:

Messenger.php

<?php namespace App\Contracts;

interface Messenger {

public function goodmorning($name);

}

В приложении / Услуги у меня есть
DailyMessenger.php

<?php namespace App\Services;

use App\Contracts\Messenger;

class DailyMessenger implements Messenger {

public function goodmorning($name)
{
return 'Goodmorning '. $name;
}

}

Теперь я хочу создать интерфейс в моем контроллер:

public function __construct(Messenger $messenger)
{
$this->messenger = $messenger;
}

Теперь, если я следую документации на веб-сайте Laravel, мне нужно будет только зарегистрировать это в сервисном контейнере, что я делаю в существующей AppServiceProvider.php

public function register()
{
$this->app->bind(
'Illuminate\Contracts\Auth\Registrar',
'App\Services\Registrar'
);

$this->app->bind('App\Contacts\Messenger', 'App\Services\DailyMessenger');
}

Если я посещаю соответствующий маршрут, который отображается на контроллер, я получаю ошибку:

BindingResolutionException in Container.php line 785:
Target [App\Contracts\Messenger] is not instantiable.

Я думаю, что точно следовал документам Laravel, но чего мне не хватает? Заранее спасибо 🙂

3

Решение

Похоже, вы неправильно написали пространство имен при связывании, использовали App \ Contacts вместо App \ Contracts. Должно быть:

$this->app->bind('App\Contracts\Messenger', 'App\Services\DailyMessenger');
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]