vendor/doctrine/doctrine-bundle/src/DoctrineBundle.php line 37
<?phpnamespace Doctrine\Bundle\DoctrineBundle;use Closure;use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\CacheCompatibilityPass;use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\CacheSchemaSubscriberPass;use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\DbalSchemaFilterPass;use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\EntityListenerPass;use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\IdGeneratorPass;use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\MiddlewaresPass;use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\RemoveLoggingMiddlewarePass;use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\RemoveProfilerControllerPass;use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\ServiceRepositoryCompilerPass;use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\WellKnownSchemaFilterPass;use Doctrine\ORM\EntityManagerInterface;use Doctrine\ORM\Proxy\Autoloader;use Doctrine\ORM\Proxy\DefaultProxyClassNameResolver;use Symfony\Bridge\Doctrine\DependencyInjection\CompilerPass\DoctrineValidationPass;use Symfony\Bridge\Doctrine\DependencyInjection\CompilerPass\RegisterEventListenersAndSubscribersPass;use Symfony\Bridge\Doctrine\DependencyInjection\CompilerPass\RegisterUidTypePass;use Symfony\Bridge\Doctrine\DependencyInjection\Security\UserProvider\EntityFactory;use Symfony\Bundle\SecurityBundle\DependencyInjection\SecurityExtension;use Symfony\Component\Console\Application;use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;use Symfony\Component\DependencyInjection\Compiler\PassConfig;use Symfony\Component\DependencyInjection\ContainerBuilder;use Symfony\Component\HttpKernel\Bundle\Bundle;use function assert;use function class_exists;use function clearstatcache;use function dirname;use function spl_autoload_unregister;/** @final since 2.9 */class DoctrineBundle extends Bundle{private ?Closure $autoloader = null;/** @return void */public function build(ContainerBuilder $container){parent::build($container);$container->addCompilerPass(new class () implements CompilerPassInterface {public function process(ContainerBuilder $container): void{if ($container->has('session.handler')) {return;}$container->removeDefinition('doctrine.orm.listeners.pdo_session_handler_schema_listener');}}, PassConfig::TYPE_BEFORE_OPTIMIZATION);$container->addCompilerPass(new RegisterEventListenersAndSubscribersPass('doctrine.connections', 'doctrine.dbal.%s_connection.event_manager', 'doctrine'), PassConfig::TYPE_BEFORE_OPTIMIZATION);if ($container->hasExtension('security')) {$security = $container->getExtension('security');if ($security instanceof SecurityExtension) {$security->addUserProviderFactory(new EntityFactory('entity', 'doctrine.orm.security.user.provider'));}}$container->addCompilerPass(new CacheCompatibilityPass());$container->addCompilerPass(new DoctrineValidationPass('orm'));$container->addCompilerPass(new EntityListenerPass());$container->addCompilerPass(new ServiceRepositoryCompilerPass());$container->addCompilerPass(new IdGeneratorPass());$container->addCompilerPass(new WellKnownSchemaFilterPass());$container->addCompilerPass(new DbalSchemaFilterPass());$container->addCompilerPass(new CacheSchemaSubscriberPass(), PassConfig::TYPE_BEFORE_REMOVING, -10);$container->addCompilerPass(new RemoveProfilerControllerPass());$container->addCompilerPass(new RemoveLoggingMiddlewarePass());$container->addCompilerPass(new MiddlewaresPass());if (! class_exists(RegisterUidTypePass::class)) {return;}$container->addCompilerPass(new RegisterUidTypePass());}/** @return void */public function boot(){// Register an autoloader for proxies to avoid issues when unserializing them// when the ORM is used.if (! $this->container->hasParameter('doctrine.orm.proxy_namespace')) {return;}$namespace = (string) $this->container->getParameter('doctrine.orm.proxy_namespace');$dir = (string) $this->container->getParameter('doctrine.orm.proxy_dir');$proxyGenerator = null;if ($this->container->getParameter('doctrine.orm.auto_generate_proxy_classes')) {// See https://github.com/symfony/symfony/pull/3419 for usage of references/** @psalm-suppress UnsupportedPropertyReferenceUsage */$container = &$this->container;$proxyGenerator = static function ($proxyDir, $proxyNamespace, $class) use (&$container): void {$originalClassName = (new DefaultProxyClassNameResolver())->resolveClassName($class);$registry = $container->get('doctrine');assert($registry instanceof Registry);foreach ($registry->getManagers() as $em) {assert($em instanceof EntityManagerInterface);if (! $em->getConfiguration()->getAutoGenerateProxyClasses()) {continue;}$metadataFactory = $em->getMetadataFactory();if ($metadataFactory->isTransient($originalClassName)) {continue;}$classMetadata = $metadataFactory->getMetadataFor($originalClassName);$em->getProxyFactory()->generateProxyClasses([$classMetadata]);clearstatcache(true, Autoloader::resolveFile($proxyDir, $proxyNamespace, $class));break;}};}$this->autoloader = Autoloader::register($dir, $namespace, $proxyGenerator);}/** @return void */public function shutdown(){if ($this->autoloader !== null) {spl_autoload_unregister($this->autoloader);$this->autoloader = null;}// Clear all entity managers to clear references to entities for GCif ($this->container->hasParameter('doctrine.entity_managers')) {foreach ($this->container->getParameter('doctrine.entity_managers') as $id) {if (! $this->container->initialized($id)) {continue;}$this->container->get($id)->clear();}}// Close all connections to avoid reaching too many connections in the process when booting again later (tests)if (! $this->container->hasParameter('doctrine.connections')) {return;}foreach ($this->container->getParameter('doctrine.connections') as $id) {if (! $this->container->initialized($id)) {continue;}$this->container->get($id)->close();}}/** @return void */public function registerCommands(Application $application){}public function getPath(): string{return dirname(__DIR__);}}