как заставить symfony создавать экземпляр службы с нетерпением, а не создавать при первом доступе (лениво)?

#php #symfony

#php #symfony

Вопрос:

Ниже приведено мое определение службы

     <service id="st_mongo.mongo_config" class="StCommonMongoBundleMongoStMongoConfig"
             factory-class="StCommonMongoBundleMongoStMongoConfig"
             factory-method="factory" public="false">
        <argument>%mongo_dsn%</argument>
        <argument>%mongo_db_collection_map%</argument>
    </service>
  

Symfony создает экземпляр этой службы (он вызывает фабричный метод «factory») при первом обращении к службе с помощью

 $continer->get("st_mongo.mongo_config");
  

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

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

Может быть, я могу использовать события ядра, но нет событий, общих для http и консоли.

Обновление: я мог бы заставить его работать с помощью http://symfony.com/doc/current/components/dependency_injection/compilation.html#execute-code-during-compilation — но не уверен, насколько он надежен. — Это не сработало, так как оно не будет вызвано после создания кэша.

Комментарии:

1. Вы можете подключать команды к системе прослушивателя с помощью: symfony.com/doc/current/components/console/events.html и просто используйте тот же прослушиватель для команд, что и http. Но вы действительно должны убедиться, что хотите такого поведения. Я подозреваю, что вы пытаетесь что-то сделать в конструкторе, который вы всегда хотите запустить? Может быть, это лучший подход.

2. Если это очень простой материал, вы можете просто реализовать SymfonyComponentHttpKernelBundleBundleInterface::boot его в своем AppBundle (если это название рассматриваемого пакета).

3. @Yoshi Спасибо, все сработало отлично!

4. @vishal Идеально! Возможно, вы захотите добавить ответ, объясняющий, что вы сделали, и каков был ваш вариант использования. Это может быть полезно для будущих посетителей.