/
githubmirror
/
symfony
Обзор
Документация
Войти
/
githubmirror
/
symfony
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
8.2
src/Symfony/Component/DependencyInjection/Extension/ExtensionTrait.php
68 строк
3 KB
Jan Nedbal
Mark callbacks with @param-immediately-invoked-callable where applicable
05 май 2026, 18:33
05 май 2026, 18:33
24e9c36
Код
Авторство
О чём код?
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\DependencyInjection\Extension; use Symfony\Component\Config\FileLocator; use Symfony\Component\Config\Loader\DelegatingLoader; use Symfony\Component\Config\Loader\LoaderResolver; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Loader\ClosureLoader; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symfony\Component\DependencyInjection\Loader\DirectoryLoader; use Symfony\Component\DependencyInjection\Loader\GlobFileLoader; use Symfony\Component\DependencyInjection\Loader\IniFileLoader; use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; /** * @author Yonel Ceruto <yonelceruto@gmail.com> */ trait ExtensionTrait { /** * @param-immediately-invoked-callable $callback */ private function executeConfiguratorCallback(ContainerBuilder $container, \Closure $callback, ConfigurableExtensionInterface $subject, bool $prepend = false): void { $env = $container->hasParameter('kernel.environment') ? $container->getParameter('kernel.environment') : null; $loader = $this->createContainerLoader($container, $env, $prepend); $file = (new \ReflectionObject($subject))->getFileName(); $bundleLoader = $loader->getResolver()->resolve($file); if (!$bundleLoader instanceof PhpFileLoader) { throw new \LogicException('Unable to create the ContainerConfigurator.'); } $bundleLoader->setCurrentDir(\dirname($file)); $instanceof = &\Closure::bind(fn &() => $this->instanceof, $bundleLoader, $bundleLoader)(); try { $callback(new ContainerConfigurator($container, $bundleLoader, $instanceof, $file, $file, $env)); } finally { $instanceof = []; $bundleLoader->registerAliasesForSinglyImplementedInterfaces(); } } private function createContainerLoader(ContainerBuilder $container, ?string $env, bool $prepend): DelegatingLoader { $locator = new FileLocator(); $resolver = new LoaderResolver([ new YamlFileLoader($container, $locator, $env, $prepend), new IniFileLoader($container, $locator, $env), new PhpFileLoader($container, $locator, $env, $prepend), new GlobFileLoader($container, $locator, $env), new DirectoryLoader($container, $locator, $env), new ClosureLoader($container, $env), ]); return new DelegatingLoader($resolver); } }