Подтвердить что ты не робот

Symfony2 ScopeCrossingInjectionException при использовании области прототипа

Моя цель - добавить data_collector в мои классы для отображения некоторой полезной информации на панели инструментов разработчика. Мой сервис:

services:
    my_api.auth.login:
        class: YO\ApiV1\Services\Auth\Login
        arguments:
            - requestId
            - "@old_sound_rabbit_mq.login_rpc"
            - "@service_container"
        scope: prototype

Мне нужен прототип прототипа, чтобы иметь разные экземпляры для каждого нового вызова. Кстати, service @old_sound_rabbit_mq.login_rpc имеет область "prototype". И я хотел бы добавить data_collector, что можно сделать с помощью:

tags:
    - { name: data_collector, template: "AcmeDebug:Collector:templatename", id: "your_collector_name" }

Но потом я получил исключение:

ScopeCrossingInjectionException: обнаружено пересечение области пересечения: Определение "профилировщик" ссылается на сервис "my_api.auth.login" который принадлежит другой иерархии областей. Эта услуга может не быть доступный последовательно. Как правило, безопаснее либо перемещать определение "профилировщик" в область "prototype" или объявить "контейнер" как дочерний масштаб "prototype". Если вы можете быть уверены, что другая область всегда активен, вы можете установить ссылку на strict = false, чтобы избавиться этой ошибки.

И это меня смущает, потому что я не знаю, что делать. Я попытался установить свойство "strict = false", но ничего не происходит.

4b9b3361

Ответ 1

Я думаю, что синхронизированные службы symfony могут вам помочь: doc

иначе вы можете установить "strict = false" следующим образом:

services:
    my.service.definition:
        class: Acme\Services\BlaService
        arguments:
            - "@any_other_service_from_narrower_scope="
        scope: prototype

"=" в конце определения службы при инъекции службы из более узкой области действия будет "строго" до false