proklung / container-locator-bundle
Container locator bundle for custom Symfony
Installs: 3
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
pkg:composer/proklung/container-locator-bundle
Requires
- php: >=7.3 || ^8.0
- symfony/config: ^4.4 || ^5.0
- symfony/dependency-injection: ^4.4 || ^5.0
- symfony/http-kernel: ^4.4 || ^5.0
Requires (Dev)
This package is auto-updated.
Last update: 2025-10-09 05:53:38 UTC
README
INTERNAL
Установка
composer.json:
"repositories": [ { "type": "git", "url": "https://github.com/proklung/container.locator.bundle" } ]
composer require proklung/container-locator-bundle
Зачем?
Эксперимент. Сейчас хэлпер container в моих пакетах обращается
к основному классу ServiceProvider, что нормально. Способ, реализуемый в этом бандле - альтернативный, представялется,
что выглядит малость "чище".
Основан на знании, что в каждый инициированый бандл по методу boot загоняется экземпляр контейнера.
Все, что делается в этом бандле - декорируется метод setContainer бандла, сохраняя контейнер в статическое свойство.
Плюс отвязывается от конкретной реализации контейнера.
Как достать контейнер
Класс ContainerLocator:
- статический метод
instanceFromBundles()- из файла конфигураций бандлов. Стоимость - загрузка файла и перебор классов, пока не будет найден бандл, имеющий методgetContainer. - статический метод
instance()- из класса этого бандла.
В результате хэлпер container может выглядеть как-то так:
function container($classContainer = ContainerLocator::class) { $container = $classContainer::instance(); if ($container === null) { throw new RuntimeException( 'Service container '. is_object($classContainer) ? get_class($classContainer) : $classContainer. ' not initialized.' ); } return $container; }
Синтаксический сахарок
Для использования в неконтейнеродружелюбных местах (внутри компонентов Битрикс и т.п)
Класс ContainerHelper:
public static function kernel()- Kernelpublic static function kernelParameters()- Параметры Kernelpublic static function parameter(string $param)- Конкретный параметр Kernel.public static function twig()- Twig.public static function session()- Session.public static function logger()- Logger (сервисpublic.logger).