Используйте декорированный сервис вместо оригинального сервиса

У меня есть ограниченный 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?

Используете ли вы Symfony 6? Я также видел некоторые проблемы с этим, поскольку клиенты с ограниченной областью настроены по-разному...

Nico Haase 04.04.2024 17:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
1
126
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это, переопределив псевдоним для этого аргумента следующим образом:

$services
    ->alias(HttpClientInterface::class.' $coreClient', HttpClientLoggerService::class.'.core');

Да, это помогает! Я также пытался использовать проход компилятора и использовать RegisterAliasForArgument. Что делает то же самое.

pepper 05.04.2024 08:25

Другие вопросы по теме