У меня есть ограниченный HTTP-клиент в моем приложении Symfony.
framework:
http_client:
scoped_clients:
core.client:
base_uri: '%env(CORE_API_URL)%'
И этот клиент вводится в эксплуатацию
Symfony\Contracts\HttpClient\HttpClientInterface $coreClient
Мне нужно зарегистрировать запрос и ответ, поэтому я ввел для него украшение
// services.php
return static function (ContainerConfigurator $configurator): void {
$services = $configurator->services();
$services
->set(HttpClientLoggerService::class . '.core')
->class(HttpClientLoggerService::class)
->decorate('core.client')
->args(
[
service('.inner'),
service('monolog.logger.core'),
],
);
};
Как я могу теперь проинструктировать Symfony использовать новую декорированную версию вместо исходного сервиса всякий раз, когда я внедряю в нее тот же Symfony\Contracts\HttpClient\HttpClientInterface $coreClient?




Вы можете сделать это, переопределив псевдоним для этого аргумента следующим образом:
$services
->alias(HttpClientInterface::class.' $coreClient', HttpClientLoggerService::class.'.core');
Да, это помогает! Я также пытался использовать проход компилятора и использовать RegisterAliasForArgument. Что делает то же самое.
Используете ли вы Symfony 6? Я также видел некоторые проблемы с этим, поскольку клиенты с ограниченной областью настроены по-разному...