亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Laravel 7 中,如何將已注冊的服務單例傳遞到另一個已注冊服務的構造函數中?

在 Laravel 7 中,如何將已注冊的服務單例傳遞到另一個已注冊服務的構造函數中?

PHP
守著星空守著你 2023-09-15 10:16:15
最近在學習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(...);

有多種方法可以訪問配置系統。


查看完整回答
反對 回復 2023-09-15
  • 1 回答
  • 0 關注
  • 117 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號