Привязка интерфейса к созданному конкретному классу в сервис-провайдере Laravel5

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

...

class FileMakerServiceProvider extends ServiceProvider
{
public function boot()
{
//
}

public function register()
{
$this->app->bind('FileMakerInterface', function ($app){
$username = env('FM_USERNAME');
$password = env('FM_PASSWORD');
$host     = env('FM_HOST');
$database = env('FM_DATABASE');

return new SSCSimpleFm(compact('username', 'password', 'host', 'database'));
});
}
}

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

Проблема в том, когда я пытаюсь внедрить интерфейс в свой контроллер dev, чтобы проверить его:

...

use App\Services\FileMakerInterface;

class DevController extends Controller
{

public function testFmConnect(FileMakerInterface $fm){
return $fm;
}
}

Я получаю сообщение об ошибке, что интерфейс не может быть создан:

введите описание изображения здесь

И я определенно включил моего поставщика услуг в config/app.php:

     /*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,

App\Providers\FileMakerServiceProvider::class

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

public function register()
{
$this->app->bind('FileMakerInterface', 'SSCSimpleFm');
}

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

Что мне здесь не хватает?

1

Решение

Вы привязываете конкретный класс к FileMakerInterface только. Требуется полностью определенное пространство имен:

$this->app->bind('App\Services\FileMakerInterface', function ($app) {
return new SSCSimpleFm([
'host'     => env('FM_HOST'),
'username' => env('FM_USERNAME'),
'password' => env('FM_PASSWORD'),
'database' => env('FM_DATABASE'),
]);
}

Теперь, когда вы печатаете подсказку App\Services\FileMakerInterfaceвместо этого вы получите экземпляр связанного класса.

1

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

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

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