Недавно я узнал о AppServiceProvider. Я зарегистрировал службу в AppServiceProvider, которая создает синглтон - экземпляр клиента GuzzleHttp, например:
$this->app->singleton('GuzzleHttp\Client', function($api) {
return new Client([
'base_uri' => env('ELASTICSEARCH_HOST'),
'auth' => [
env('ELASTICSEARCH_USER'),
env('ELASTICSEARCH_PASS')
],
]);
});
Это подключается к API ElasticSearch и в настоящее время работает:
$response = app('GuzzleHttp\Client')->request('GET');
Я настроил фасад под названием ElasticSearchFacade, который содержит только getFacadeAccessor()
:
protected static function getFacadeAccessor()
{
return 'elasticSearch';
}
Я также зарегистрировал elasticSearch
в моем AppServiceProvider, например:
$this->app->bind('elasticSearch', function() {
return new ElasticSearch();
});
Будет создан новый экземпляр ElasticSearch. Однако я бы хотел передать GuzzleHttp\Client
в службу elasticSearch. Итак, я попытался добавить в свой файл ElasticSearch. php следующее:
use GuzzleHttp\Client;
class ElasticSearch
{
protected $client;
public function __contruct(Client $client)
{
$this->client = $client;
}
public function handle()
{
$response = $this->client->request('GET');
die($response->getBody()->getContents());
}
}
Теперь я изменил зарегистрированную службу, чтобы она проходила через клиент GuzzleHttp, например:
$this->app->bind('elasticSearch', function() {
return new ElasticSearch(app('GuzzleHttp\Client'));
});
Однако я получаю сообщение об ошибке:
PHP Ошибка: вызов функции-члена request () на null