首页 > 解决方案 > 将额外参数传递给八点/guzzle 客户端类(Symfony 4)

问题描述

在 Symfony 4 项目中,我使用eightpoints/guzzlebundle 来调用远程 API。安装捆绑包(并在单独的 yaml 文件中配置客户端)后,我按照此教程使我的客户端自动装配,效果很好。然后扩展了我的客户端类(即从 的类下降的类GuzzleHttp\Client,相当于ApiPaymentClient上述指南中的类),其中包含一些处理我需要的调用的更高级别的方法,这也很有效。

问题是:有没有办法让我的客户端类接受额外的参数?具体来说,我想在parametersmy 部分定义一个参数services.yaml,然后将其绑定到客户端类构造函数中的特定额外参数(然后将参数值存储在私有变量中以供方法中使用),即

class MyClient extends GuzzleHttp\Client
{
    public function __construct($config, $apiKey)
    {
        parent::__construct($config);
        $this->apiKey = $apiKey;
    }
    /*...*/
}

最初(即作为上述指南的结果)客户端服务的定义services.yaml如下:

App\Client\MyClient: '@eight_points_guzzle.client.my_client'

这确保MyClient获得在

eight_points_guzzle:
    clients:
        my_client:

单独的捆绑配置文件 ( eight_points_guzzle.yaml) 中的部分。

如何更改App\Client\MyClient服务定义以接受额外参数并仍从中获取配置eight_points_guzzle.yaml?到目前为止,我已经管理了一项或另一项工作,但不是两者都进行(即,使绑定工作使客户端定义eight_points_guzzle.yaml不被读取,反之亦然。)

底线:是的,我可以在 MyClient 类中将参数定义为类 const,但我不喜欢这种解决方案;更不用说我有一天会需要传递一个服务的情况,而不仅仅是一个简单的变量。

标签: guzzlesymfony4

解决方案


推荐阅读