如何在Laravel 7中将注册服务单例传递给另一个注册服务的构造函数?

派对戒指:

我最近一直在学习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()

lagbox:

构造方法__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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在python中将一个函数传递给另一个函数

如何将编写的对象传递给另一个类的构造函数?

如何在xonsh shell中将Python构造的输出传递给另一个命令?

C ++:如何将一个对象传递给另一个对象构造函数?

如何在MainPage.xaml.cs的构造函数中将事件处理程序注册到另一个类的事件

如何在角度2中将一个组件服务响应传递给另一组件

如何在另一个函数中将变量传递给此结果div

如何在React中将函数传递给另一个组件

如何将变量传递给在另一个函数中声明的函数

如何将函数作为参数传递给 Javascript 中的另一个函数?

如何将另一个函数作为变量传递给R中的函数?

如何在Go中将可变参数从一个函数传递给另一个函数

如何在angularJS中将变量从一个函数传递给另一个函数?

如何在perl 6中将类方法作为参数传递给该类的另一个方法

如何从Laravel 8中的另一个控制器将参数传递给Controller中的函数

如何将&rest参数传递给emacs lisp中的另一个函数?

如何将BufReader传递给rust中的另一个函数?

如何将未知变量传递给R中的另一个函数

如何在构造函数中传递参数来保留注册的服务使用情况?

如何将小部件构造函数作为参数传递给另一个小部件来构建

如何将一个函数的值传递给另一个函数?

如何调用注入另一个构造函数服务PHP Symfony的方法服务

如何在Angular中将数组从一个服务注入到另一个服务的数组中

如何在构造函数中将对象数组作为参数传递,然后将传递的数组复制到另一个数组(仍在构造函数中)

在Laravel中,如何在测试时为服务容器提供另一个实现?

如何在Go中将服务指针从一个包传递到另一个包?

如何在 Angular 5 中将服务数据从一个组件传递到另一个组件

如何在传递给另一个组件的函数中获取useState变量的值

如何将一个组件中的props onClicked函数传递给另一个组件