我最近一直在学习AppServiceProvider。我已经在AppServiceProvider中注册了一个服务,该服务创建了一个单例-实例化的GuzzleHttp Client,如下所示:
$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 Client传递:
$this->app->bind('elasticSearch', function() {
return new ElasticSearch(app('GuzzleHttp\Client'));
});
但是我得到了错误:
PHP错误:在null上调用成员函数request()
构造方法__construct
不是__contruct
。您尚未为ElasticSearch
类定义自定义构造函数。因此该成员变量为null
。
注意:不要env
在配置文件之外调用。
为了避免在env
配置文件之外进行这些调用,您可以根据需要添加配置文件或将其添加到当前配置文件中。诸如Elastic Search凭证之类的东西可能会添加到services.php
配置文件中:
<?php
return [
...
'elasticsearch' => [
'host' => env('ELASTICSEARCH_HOST'),
'user' => env('ELASTICSEARCH_USER'),
'password' => env('ELASTICSEARCH_PASS'),
],
...
];
现在,您已经在配置中有了这些,可以使用配置系统提取这些值:
config('services.elasticsearch'); // that whole array of values
config('services.elasticsearch.host'); // just that host value
Config::get('services.elasticsearch');
app('config')->get(...);
有多种访问配置系统的方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句