vendor/shopware/core/Framework/Framework.php line 47
<?php declare(strict_types=1);namespace Shopware\Core\Framework;use Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry;use Shopware\Core\Framework\DataAbstractionLayer\ExtensionRegistry;use Shopware\Core\Framework\DependencyInjection\CompilerPass\ActionEventCompilerPass;use Shopware\Core\Framework\DependencyInjection\CompilerPass\AssetRegistrationCompilerPass;use Shopware\Core\Framework\DependencyInjection\CompilerPass\DefaultTransportCompilerPass;use Shopware\Core\Framework\DependencyInjection\CompilerPass\DemodataCompilerPass;use Shopware\Core\Framework\DependencyInjection\CompilerPass\DisableTwigCacheWarmerCompilerPass;use Shopware\Core\Framework\DependencyInjection\CompilerPass\EntityCompilerPass;use Shopware\Core\Framework\DependencyInjection\CompilerPass\FeatureFlagCompilerPass;use Shopware\Core\Framework\DependencyInjection\CompilerPass\FilesystemConfigMigrationCompilerPass;use Shopware\Core\Framework\DependencyInjection\CompilerPass\FrameworkMigrationReplacementCompilerPass;use Shopware\Core\Framework\DependencyInjection\CompilerPass\RateLimiterCompilerPass;use Shopware\Core\Framework\DependencyInjection\CompilerPass\RedisPrefixCompilerPass;use Shopware\Core\Framework\DependencyInjection\CompilerPass\RouteScopeCompilerPass;use Shopware\Core\Framework\DependencyInjection\CompilerPass\TwigEnvironmentCompilerPass;use Shopware\Core\Framework\DependencyInjection\CompilerPass\TwigLoaderConfigCompilerPass;use Shopware\Core\Framework\DependencyInjection\FrameworkExtension;use Shopware\Core\Framework\Increment\IncrementerGatewayCompilerPass;use Shopware\Core\Framework\Log\Package;use Shopware\Core\Framework\Migration\MigrationCompilerPass;use Shopware\Core\Framework\Test\DependencyInjection\CompilerPass\ContainerVisibilityCompilerPass;use Shopware\Core\Framework\Test\RateLimiter\DisableRateLimiterCompilerPass;use Shopware\Core\Kernel;use Shopware\Core\System\SalesChannel\Entity\SalesChannelDefinitionInstanceRegistry;use Symfony\Component\Config\FileLocator;use Symfony\Component\Config\Loader\DelegatingLoader;use Symfony\Component\Config\Loader\LoaderResolver;use Symfony\Component\DependencyInjection\Compiler\PassConfig;use Symfony\Component\DependencyInjection\ContainerBuilder;use Symfony\Component\DependencyInjection\Extension\Extension;use Symfony\Component\DependencyInjection\Loader\ClosureLoader;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\XmlFileLoader;use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;/*** @internal*/#[Package('core')]class Framework extends Bundle{public function getTemplatePriority(): int{return -1;}public function getContainerExtension(): Extension{return new FrameworkExtension();}/*** {@inheritdoc}*/public function build(ContainerBuilder $container): void{$container->setParameter('locale', 'en-GB');$environment = (string) $container->getParameter('kernel.environment');$this->buildConfig($container, $environment);$loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/DependencyInjection/'));$loader->load('services.xml');$loader->load('acl.xml');$loader->load('api.xml');$loader->load('app.xml');$loader->load('custom-field.xml');$loader->load('data-abstraction-layer.xml');$loader->load('demodata.xml');$loader->load('event.xml');$loader->load('hydrator.xml');$loader->load('filesystem.xml');$loader->load('message-queue.xml');$loader->load('plugin.xml');$loader->load('rule.xml');$loader->load('scheduled-task.xml');$loader->load('store.xml');$loader->load('script.xml');$loader->load('language.xml');$loader->load('update.xml');$loader->load('seo.xml');$loader->load('webhook.xml');$loader->load('rate-limiter.xml');$loader->load('increment.xml');if ($container->getParameter('kernel.environment') === 'test') {$loader->load('services_test.xml');$loader->load('store_test.xml');$loader->load('seo_test.xml');}// make sure to remove services behind a feature flag, before some other compiler passes may reference them, therefore the high priority$container->addCompilerPass(new FeatureFlagCompilerPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, 1000);$container->addCompilerPass(new EntityCompilerPass());$container->addCompilerPass(new MigrationCompilerPass(), PassConfig::TYPE_AFTER_REMOVING);$container->addCompilerPass(new ActionEventCompilerPass());$container->addCompilerPass(new DisableTwigCacheWarmerCompilerPass());$container->addCompilerPass(new DefaultTransportCompilerPass());$container->addCompilerPass(new TwigLoaderConfigCompilerPass());$container->addCompilerPass(new TwigEnvironmentCompilerPass());$container->addCompilerPass(new RouteScopeCompilerPass());$container->addCompilerPass(new AssetRegistrationCompilerPass());$container->addCompilerPass(new FilesystemConfigMigrationCompilerPass());$container->addCompilerPass(new RateLimiterCompilerPass());$container->addCompilerPass(new IncrementerGatewayCompilerPass());$container->addCompilerPass(new RedisPrefixCompilerPass());if ($container->getParameter('kernel.environment') === 'test') {$container->addCompilerPass(new DisableRateLimiterCompilerPass());$container->addCompilerPass(new ContainerVisibilityCompilerPass());}$container->addCompilerPass(new FrameworkMigrationReplacementCompilerPass());$container->addCompilerPass(new DemodataCompilerPass());parent::build($container);}public function boot(): void{parent::boot();$featureFlags = $this->container->getParameter('shopware.feature.flags');if (!\is_array($featureFlags)) {throw new \RuntimeException('Container parameter "shopware.feature.flags" needs to be an array');}Feature::registerFeatures($featureFlags);$cacheDir = $this->container->getParameter('kernel.cache_dir');if (!\is_string($cacheDir)) {throw new \RuntimeException('Container parameter "kernel.cache_dir" needs to be a string');}$this->registerEntityExtensions($this->container->get(DefinitionInstanceRegistry::class),$this->container->get(SalesChannelDefinitionInstanceRegistry::class),$this->container->get(ExtensionRegistry::class));}/*** @return string[]*/protected function getCoreMigrationPaths(): array{return [__DIR__ . '/../Migration' => 'Shopware\Core\Migration',];}private function buildConfig(ContainerBuilder $container, string $environment): void{$cacheDir = $container->getParameter('kernel.cache_dir');if (!\is_string($cacheDir)) {throw new \RuntimeException('Container parameter "kernel.cache_dir" needs to be a string');}$locator = new FileLocator('Resources/config');$resolver = new LoaderResolver([new XmlFileLoader($container, $locator),new YamlFileLoader($container, $locator),new IniFileLoader($container, $locator),new PhpFileLoader($container, $locator),new GlobFileLoader($container, $locator),new DirectoryLoader($container, $locator),new ClosureLoader($container),]);$configLoader = new DelegatingLoader($resolver);$confDir = $this->getPath() . '/Resources/config';$configLoader->load($confDir . '/{packages}/*' . Kernel::CONFIG_EXTS, 'glob');$configLoader->load($confDir . '/{packages}/' . $environment . '/*' . Kernel::CONFIG_EXTS, 'glob');if ($environment === 'e2e') {$configLoader->load($confDir . '/{packages}/prod/*' . Kernel::CONFIG_EXTS, 'glob');}}private function registerEntityExtensions(DefinitionInstanceRegistry $definitionRegistry,SalesChannelDefinitionInstanceRegistry $salesChannelRegistry,ExtensionRegistry $registry): void {foreach ($registry->getExtensions() as $extension) {/** @var string $class */$class = $extension->getDefinitionClass();$definition = $definitionRegistry->get($class);$definition->addExtension($extension);$salesChannelDefinition = $salesChannelRegistry->get($class);// same definition? do not added extensionif ($salesChannelDefinition !== $definition) {$salesChannelDefinition->addExtension($extension);}}}}