Я пытаюсь разрешить конкретный класс через интерфейс, привязанный к сервисному контейнеру Laravel5.
Мой бетонный класс
namespace App\Services;
use App\Services\FileMakerInterface;
class SSCSimpleFM implements FileMakerInterface {
protected $username;
protected $password;
protected $host;
protected $database;
public function __construct($config){
$this->username = $config['username'];
$this->password = $config['password'];
$this->host = $config['host'];
$this->database = $config['database'];
}
}
Мой интерфейс
namespace App\Services;
interface FileMakerInterface {
}
Мой поставщик услуг
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\SSCSimpleFM;
class FileMakerServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind('App\Services\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'));
});
}
}
Сама привязка работает. Если dd
в конструкторе конкретного класса, я вижу его в браузере, но когда я пытаюсь использовать интерфейс в своем тестовом контроллере:
use App\Services\FileMakerInterface;
class DevController extends Controller
{
public function testFmConnect(FileMakerInterface $fm){
return $fm;
}
}
Я получаю сообщение об ошибке «Содержимое ответа должно быть строкой или объектом, реализующим __toString(), указанный объект».
Я просмотрел другие примеры такой привязки и не вижу ничего, что я делаю неправильно.
Любые идеи?