最近在学习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')
],
]);
});
这是连接到 ElasticSearch API,目前有效:
$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 错误:在 null 上调用成员函数 request()
GCT1015