Расширяет клиент Guzzle и сохраняет конфигурацию yaml - PullRequest
0 голосов
/ 03 июля 2019

Я должен отправить все свои лиды по одному и тому же URL, но мне нужен другой ApiKey в зависимости от того, кого я отправляю.

Итак, я хотел бы знать, есть ли способ создать родителя BaseClient с общим base_url и создать столько клиентов, сколько мне нужно, с расширением BaseClient для определения только ApiKey и don ' Для каждого клиента нужно переопределить 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?

1 Ответ

0 голосов
/ 03 июля 2019

Вы можете сделать это следующим образом:

Класс 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');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...