Symfony 4 - сервис отложенной загрузки вручную на настраиваемой фабрике

Я хотел бы знать, есть ли способ (в пределах разумного) вручную ленивую загрузку службы на вашей настраиваемой фабрике после сборки DIC. Я пока ничего не нашел ни в документации, ни на ТАК. Вот объяснение того, чего я хочу достичь:

class ExampleFactory 
{
    .
    .
    .

    public function create() 
    {
        return new Example(new LazyLoadedDependency());
    }

    .
    .
    .
}

Итак, у меня есть фабрика для класса Example, и этот класс примера принимает зависимость, которую я хотел бы загружать лениво.

Если я установлю для LazyLoadedDependency () значение lazy: true в моем services.yml, конечно, это не будет работать, потому что я использую эту фабрику после сборки DIC. Поэтому, когда я пытаюсь обновить его, он всегда будет полностью инициализирован. Я бы хотел заставить Symfony загружать это лениво. Я видел пару файлов в собственном коде Symfony, но, похоже, это более сложная вещь.

Кто-нибудь знает как это сделать? Каждый совет о том, как я могу это сделать, будет большим подспорьем.

Зачем нужны нестандартные фабрики, если у вас есть DI? Вы ищете shared: false в определении вашего сервиса?

Nico Haase 10.03.2018 21:55

Написал свой собственный конвертер параметров, и он создает для меня специальный класс Request (там я использую factory, он создается только тогда, когда мне это нужно). Я использую его для перемещения данных, у него также есть особые возможности. Под этим я подразумеваю возможность сериализации данных в массив или другой формат (поэтому я просто выполняю $ request-> toArray ()). Для этого мне нужно передать в него новый экземпляр сериализатора, когда я создаю свой класс Request. Я просто хочу сделать его максимально легким. Надеюсь, у меня не получилось размыто. Если у вас есть еще вопросы, просто задавайте.

Robert 10.03.2018 22:01

Не могли бы вы сделать свою фабрику службой самостоятельно, передать контейнер и получить ленивую загруженную службу при создании нового экземпляра?

Nico Haase 10.03.2018 23:03

Я попробую это. А пока у меня есть вопрос. Разве это не поражение цели всего этого? Я имею в виду, я думаю, что это довольно тяжелое решение, а не хорошая практика?

Robert 10.03.2018 23:26

Итак, я пробовал это, и даже когда он установлен на ленивый (также должен быть установлен как общедоступный, потому что по умолчанию в Symfony 4 службы являются частными), я получаю полностью инициализированный объект.

Robert 10.03.2018 23:33
Стоит ли изучать 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 нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
5
481
0

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