В проекте Symfony 4 я использую пакет eightpoints/guzzle
для вызовов удаленного API.После установки пакета (и настройки клиента в отдельном файле yaml) я следовал за это , чтобы сделать мой клиент автоматически подключенным, что прекрасно работает.Затем расширен мой клиентский класс (то есть класс, нисходящий от GuzzleHttp\Client
, эквивалентного классу ApiPaymentClient
в вышеприведенном руководстве) с некоторыми высокоуровневыми методами, которые заботятся о нужных мне вызовах, что также прекрасно работает.
Вопрос: есть ли способ заставить мой клиентский класс принимать дополнительные параметры?В частности, я хотел бы определить параметр в разделе parameters
моего 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
не читаемым, и наоборот.)
Итог: да, я могуопределить параметр как класс const в классе MyClient, но мне не нравится это решение;не говоря уже о ситуации, мне однажды нужно будет передать услугу, а не просто переменную.