我必须将所有潜在客户发送到相同的URL,但是我需要根据发送的潜在客户使用不同的ApiKey。
所以我想知道是否有一种方法可以创建具有公用BaseClient
的父项base_url
,并创建所需数量的客户端,并扩展BaseClient
以仅定义ApiKey
,而不必为每个客户端重新定义base_url
。
当前,我必须这样做:
yaml
eight_points_guzzle:
clients:
client1:
class: Client1
base_url: '%common.apiurl%'
options:
headers:
apikey: '%client1.apikey%'
client2:
class: Client2
base_url: '%common.apiurl%'
options:
headers:
apikey: '%client2.apikey%'
...
但是我希望能够做到这样:
yaml
eight_points_guzzle:
clients:
base_client:
class: BaseClient
base_url: '%common.apiurl%'
options:
headers:
apikey: '%client1.apikey%'
client1:
class: Client1
extends: base_client
options:
headers:
apikey: '%client1.apikey%'
client2:
class: Client2
extends: base_client
options:
headers:
apikey: '%client2.apikey%'
...
或者对我来说更好:
yaml
eight_points_guzzle:
clients:
base_client:
class: BaseClient
base_url: '%common.apiurl%'
options:
headers:
apikey: '%default.apikey%'
client2:
class: Client2
extends: base_client
options:
headers:
apikey: '%client2.apikey%'
...
有人知道我该怎么做吗?
我知道我可以使用构造函数来做到这一点,但我想知道是否可以使用YAML配置来做到这一点?
答案 0 :(得分:0)
您可以这样做:
下面的BaseClientClass
类(从GuzzleHttp \ Client扩展)应该具有setApiKey($key)
和setBaseUrl($url)
函数。因此,无需为每条线索扩展或创建新的类。
your_specified_client1:
class: BaseClientClass
calls:
- [setBaseUrl, ['%your_base_url%']]
- [setApiKey, ['%specified_api_key_1%']]
your_specified_client2:
class: BaseClientClass
calls:
- [setBaseUrl, ['%your_base_url%']]
- [setApiKey, ['%specified_api_key_2%']]
您可以使用以下每种方法:$clientServiceFor2 = $this->get('your_specified_client2');