Decorators в Symfony и особенности HttpClientInterface

Простые случаи декорации можно увидеть в документаци, или ниже:

services:
    App\MyDecorator:
    	decorates: Symfony\Contracts\Cache\CacheInterface
    	decoration_priority: 10
        arguments:
            $varNameService: '@Foo\BarService'
services:
  my.super.decorator:
    class: App\MyDecorator
    decorates: Symfony\Contracts\Cache\CacheInterface
    public: false
    arguments:
    - "@my.service"
    - "@?logger"
    - "@bar.inner"
    calls:
    - [setTwig, ['@twig']]

HttpClientInterface

А вот задекорировать HttpClientInterface для описанных http_client-ов просто не выйдет. Просто в настоящий момент (2024 год) еще не предусмотрели декорирование всех настроенных http_client-ов с помощью одного объявления декорироавния HttpClientInterface. Вернее он декорируется, но уже после того, как все настроено, поэтому нужно декорировать отдельно каждый клиент, вот так:

framework:
    http_client:
        scoped_clients:
            my.http_client:
                base_uri: 'https://api.yapro.ru'
services:
    App\Service\MyHttpClientDecorator:
       decorates: my.http_client

но если нужно будет задекорировать 10 настроенных http-клиентов, то тут нужно воспользоваться Compiler passes, вот так.

Источник: 1 - 2


11.09.2021 07:08

Комментарии

Комментариев пока нет.


Copyrights © 2007 - 2026 YaPro.Ru