最近在学习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()
1 回答
GCT1015
TA贡献1827条经验 获得超4个赞
构造方法__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(...);
有多种方法可以访问配置系统。
- 1 回答
- 0 关注
- 87 浏览
添加回答
举报
0/150
提交
取消