#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 Идеально! Возможно, вы захотите добавить ответ, объясняющий, что вы сделали, и каков был ваш вариант использования. Это может быть полезно для будущих посетителей.