class CoreBundle

Bundle class for mandatory core services.

This is where Drupal core registers all of its services to the Dependency Injection Container. Modules wishing to register services to the container should extend Symfony's Bundle class directly, not this class.

Hierarchy

Expanded class hierarchy of CoreBundle

1 file declares its use of CoreBundle
DrupalKernel.php in drupal/core/lib/Drupal/Core/DrupalKernel.php
Definition of Drupal\Core\DrupalKernel.

File

drupal/core/lib/Drupal/Core/CoreBundle.php, line 29
Definition of Drupal\Core\CoreBundle.

Namespace

Drupal\Core
View source
class CoreBundle extends Bundle {

  /**
   * Implements \Symfony\Component\HttpKernel\Bundle\BundleInterface::build().
   */
  public function build(ContainerBuilder $container) {

    // Register active configuration storage.
    $container
      ->register('config.cachedstorage.storage', 'Drupal\\Core\\Config\\FileStorage')
      ->addArgument(config_get_config_directory(CONFIG_ACTIVE_DIRECTORY));

    // @todo Replace this with a cache.factory service plus 'config' argument.
    $container
      ->register('cache.config', 'Drupal\\Core\\Cache\\CacheBackendInterface')
      ->setFactoryClass('Drupal\\Core\\Cache\\CacheFactory')
      ->setFactoryMethod('get')
      ->addArgument('config');
    $container
      ->register('config.storage', 'Drupal\\Core\\Config\\CachedStorage')
      ->addArgument(new Reference('config.cachedstorage.storage'))
      ->addArgument(new Reference('cache.config'));

    // Register configuration object factory.
    $container
      ->register('config.subscriber.globalconf', 'Drupal\\Core\\EventSubscriber\\ConfigGlobalOverrideSubscriber');
    $container
      ->register('dispatcher', 'Symfony\\Component\\EventDispatcher\\EventDispatcher')
      ->addMethodCall('addSubscriber', array(
      new Reference('config.subscriber.globalconf'),
    ));
    $container
      ->register('config.factory', 'Drupal\\Core\\Config\\ConfigFactory')
      ->addArgument(new Reference('config.storage'))
      ->addArgument(new Reference('dispatcher'));

    // Register staging configuration storage.
    $container
      ->register('config.storage.staging', 'Drupal\\Core\\Config\\FileStorage')
      ->addArgument(config_get_config_directory(CONFIG_STAGING_DIRECTORY));

    // Register the service for the default database connection.
    $container
      ->register('database', 'Drupal\\Core\\Database\\Connection')
      ->setFactoryClass('Drupal\\Core\\Database\\Database')
      ->setFactoryMethod('getConnection')
      ->addArgument('default');

    // Register the KeyValueStore factory.
    $container
      ->register('keyvalue', 'Drupal\\Core\\KeyValueStore\\KeyValueFactory')
      ->addArgument(new Reference('service_container'));
    $container
      ->register('keyvalue.database', 'Drupal\\Core\\KeyValueStore\\KeyValueDatabaseFactory')
      ->addArgument(new Reference('database'));
    $container
      ->register('path.alias_manager', 'Drupal\\Core\\Path\\AliasManager')
      ->addArgument(new Reference('database'))
      ->addArgument(new Reference('keyvalue'));
    $container
      ->register('http_client_simpletest_subscriber', 'Drupal\\Core\\Http\\Plugin\\SimpletestHttpRequestSubscriber');
    $container
      ->register('http_default_client', 'Guzzle\\Http\\Client')
      ->addArgument(NULL)
      ->addArgument(array(
      'curl.CURLOPT_TIMEOUT' => 30.0,
      'curl.CURLOPT_MAXREDIRS' => 3,
    ))
      ->addMethodCall('addSubscriber', array(
      new Reference('http_client_simpletest_subscriber'),
    ))
      ->addMethodCall('setUserAgent', array(
      'Drupal (+http://drupal.org/)',
    ));

    // Register the EntityManager.
    $container
      ->register('plugin.manager.entity', 'Drupal\\Core\\Entity\\EntityManager');

    // The 'request' scope and service enable services to depend on the Request
    // object and get reconstructed when the request object changes (e.g.,
    // during a subrequest).
    $container
      ->addScope(new Scope('request'));
    $container
      ->register('request', 'Symfony\\Component\\HttpFoundation\\Request')
      ->setSynthetic(TRUE);
    $container
      ->register('dispatcher', 'Symfony\\Component\\EventDispatcher\\ContainerAwareEventDispatcher')
      ->addArgument(new Reference('service_container'));
    $container
      ->register('resolver', 'Drupal\\Core\\ControllerResolver')
      ->addArgument(new Reference('service_container'));
    $container
      ->register('http_kernel', 'Drupal\\Core\\HttpKernel')
      ->addArgument(new Reference('dispatcher'))
      ->addArgument(new Reference('service_container'))
      ->addArgument(new Reference('resolver'));
    $container
      ->register('language_manager', 'Drupal\\Core\\Language\\LanguageManager')
      ->addArgument(new Reference('request'))
      ->setScope('request');
    $container
      ->register('database.slave', 'Drupal\\Core\\Database\\Connection')
      ->setFactoryClass('Drupal\\Core\\Database\\Database')
      ->setFactoryMethod('getConnection')
      ->addArgument('slave');
    $container
      ->register('typed_data', 'Drupal\\Core\\TypedData\\TypedDataManager');

    // Add the user's storage for temporary, non-cache data.
    $container
      ->register('lock', 'Drupal\\Core\\Lock\\DatabaseLockBackend');
    $container
      ->register('user.tempstore', 'Drupal\\user\\TempStoreFactory')
      ->addArgument(new Reference('database'))
      ->addArgument(new Reference('lock'));
    $container
      ->register('twig', 'Drupal\\Core\\Template\\TwigEnvironment')
      ->setFactoryClass('Drupal\\Core\\Template\\TwigFactory')
      ->setFactoryMethod('get');

    // Add the entity query factory.
    $container
      ->register('entity.query', 'Drupal\\Core\\Entity\\Query\\QueryFactory')
      ->addArgument(new Reference('service_container'));
    $container
      ->register('router.dumper', 'Drupal\\Core\\Routing\\MatcherDumper')
      ->addArgument(new Reference('database'));
    $container
      ->register('router.builder', 'Drupal\\Core\\Routing\\RouteBuilder')
      ->addArgument(new Reference('router.dumper'))
      ->addArgument(new Reference('lock'))
      ->addArgument(new Reference('dispatcher'));
    $container
      ->register('matcher', 'Drupal\\Core\\Routing\\ChainMatcher');
    $container
      ->register('legacy_url_matcher', 'Drupal\\Core\\LegacyUrlMatcher')
      ->addTag('chained_matcher');
    $container
      ->register('nested_matcher', 'Drupal\\Core\\Routing\\NestedMatcher')
      ->addTag('chained_matcher', array(
      'priority' => 5,
    ));
    $container
      ->register('cache.path', 'Drupal\\Core\\Cache\\CacheBackendInterface')
      ->setFactoryClass('Drupal\\Core\\Cache\\CacheFactory')
      ->setFactoryMethod('get')
      ->addArgument('path');
    $container
      ->register('path.alias_manager.cached', 'Drupal\\Core\\CacheDecorator\\AliasManagerCacheDecorator')
      ->addArgument(new Reference('path.alias_manager'))
      ->addArgument(new Reference('cache.path'));
    $container
      ->register('path.crud', 'Drupal\\Core\\Path\\Path')
      ->addArgument(new Reference('database'))
      ->addArgument(new Reference('path.alias_manager'));

    // Add password hashing service. The argument to PhpassHashedPassword
    // constructor is the log2 number of iterations for password stretching.
    // This should increase by 1 every Drupal version in order to counteract
    // increases in the speed and power of computers available to crack the
    // hashes. The current password hashing method was introduced in Drupal 7
    // with a log2 count of 15.
    $container
      ->register('password', 'Drupal\\Core\\Password\\PhpassHashedPassword')
      ->addArgument(16);

    // The following services are tagged as 'nested_matcher' services and are
    // processed in the RegisterNestedMatchersPass compiler pass. Each one
    // needs to be set on the matcher using a different method, so we use a
    // tag attribute, 'method', which can be retrieved and passed to the
    // addMethodCall() method that gets called on the matcher service in the
    // compiler pass.
    $container
      ->register('path_matcher', 'Drupal\\Core\\Routing\\PathMatcher')
      ->addArgument(new Reference('database'))
      ->addTag('nested_matcher', array(
      'method' => 'setInitialMatcher',
    ));
    $container
      ->register('http_method_matcher', 'Drupal\\Core\\Routing\\HttpMethodMatcher')
      ->addTag('nested_matcher', array(
      'method' => 'addPartialMatcher',
    ));
    $container
      ->register('mime_type_matcher', 'Drupal\\Core\\Routing\\MimeTypeMatcher')
      ->addTag('nested_matcher', array(
      'method' => 'addPartialMatcher',
    ));
    $container
      ->register('first_entry_final_matcher', 'Drupal\\Core\\Routing\\FirstEntryFinalMatcher')
      ->addTag('nested_matcher', array(
      'method' => 'setFinalMatcher',
    ));
    $container
      ->register('router_processor_subscriber', 'Drupal\\Core\\EventSubscriber\\RouteProcessorSubscriber')
      ->addTag('event_subscriber');
    $container
      ->register('router_listener', 'Symfony\\Component\\HttpKernel\\EventListener\\RouterListener')
      ->addArgument(new Reference('matcher'))
      ->addTag('event_subscriber');
    $container
      ->register('content_negotiation', 'Drupal\\Core\\ContentNegotiation');
    $container
      ->register('view_subscriber', 'Drupal\\Core\\EventSubscriber\\ViewSubscriber')
      ->addArgument(new Reference('content_negotiation'))
      ->addTag('event_subscriber');
    $container
      ->register('legacy_access_subscriber', 'Drupal\\Core\\EventSubscriber\\LegacyAccessSubscriber')
      ->addTag('event_subscriber');
    $container
      ->register('access_manager', 'Drupal\\Core\\Access\\AccessManager')
      ->addArgument(new Reference('request'))
      ->addMethodCall('setContainer', array(
      new Reference('service_container'),
    ));
    $container
      ->register('access_subscriber', 'Drupal\\Core\\EventSubscriber\\AccessSubscriber')
      ->addArgument(new Reference('access_manager'))
      ->addTag('event_subscriber');
    $container
      ->register('access_check.default', 'Drupal\\Core\\Access\\DefaultAccessCheck')
      ->addTag('access_check');
    $container
      ->register('access_check.permission', 'Drupal\\Core\\Access\\PermissionAccessCheck')
      ->addTag('access_check');
    $container
      ->register('maintenance_mode_subscriber', 'Drupal\\Core\\EventSubscriber\\MaintenanceModeSubscriber')
      ->addTag('event_subscriber');
    $container
      ->register('path_subscriber', 'Drupal\\Core\\EventSubscriber\\PathSubscriber')
      ->addArgument(new Reference('path.alias_manager.cached'))
      ->addTag('event_subscriber');
    $container
      ->register('legacy_request_subscriber', 'Drupal\\Core\\EventSubscriber\\LegacyRequestSubscriber')
      ->addTag('event_subscriber');
    $container
      ->register('legacy_controller_subscriber', 'Drupal\\Core\\EventSubscriber\\LegacyControllerSubscriber')
      ->addTag('event_subscriber');
    $container
      ->register('finish_response_subscriber', 'Drupal\\Core\\EventSubscriber\\FinishResponseSubscriber')
      ->addArgument(new Reference('language_manager'))
      ->setScope('request')
      ->addTag('event_subscriber');
    $container
      ->register('request_close_subscriber', 'Drupal\\Core\\EventSubscriber\\RequestCloseSubscriber')
      ->addTag('event_subscriber');
    $container
      ->register('config_global_override_subscriber', 'Drupal\\Core\\EventSubscriber\\ConfigGlobalOverrideSubscriber')
      ->addTag('event_subscriber');
    $container
      ->register('exception_listener', 'Drupal\\Core\\EventSubscriber\\ExceptionListener')
      ->addTag('event_subscriber')
      ->addArgument(new Reference('service_container'))
      ->setFactoryClass('Drupal\\Core\\ExceptionController')
      ->setFactoryMethod('getExceptionListener');
    $container
      ->register('transliteration', 'Drupal\\Core\\Transliteration\\PHPTransliteration');

    // Add Serializer with arguments to be replaced in the compiler pass.
    $container
      ->register('serializer', 'Symfony\\Component\\Serializer\\Serializer')
      ->addArgument(array())
      ->addArgument(array());
    $container
      ->register('flood', 'Drupal\\Core\\Flood\\DatabaseBackend')
      ->addArgument(new Reference('database'));
    $container
      ->addCompilerPass(new RegisterMatchersPass());
    $container
      ->addCompilerPass(new RegisterNestedMatchersPass());

    // Add a compiler pass for registering event subscribers.
    $container
      ->addCompilerPass(new RegisterKernelListenersPass(), PassConfig::TYPE_AFTER_REMOVING);

    // Add a compiler pass for adding Normalizers and Encoders to Serializer.
    $container
      ->addCompilerPass(new RegisterSerializationClassesPass());

    // Add a compiler pass for registering event subscribers.
    $container
      ->addCompilerPass(new RegisterKernelListenersPass(), PassConfig::TYPE_AFTER_REMOVING);
    $container
      ->addCompilerPass(new RegisterAccessChecksPass());
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Bundle::$extension protected property
Bundle::$name protected property
Bundle::$reflected protected property
Bundle::boot public function Boots the Bundle. Overrides BundleInterface::boot
Bundle::getContainerExtension public function Returns the bundle's container extension. Overrides BundleInterface::getContainerExtension
Bundle::getName final public function Returns the bundle name (the class short name). Overrides BundleInterface::getName
Bundle::getNamespace public function Gets the Bundle namespace. Overrides BundleInterface::getNamespace
Bundle::getParent public function Returns the bundle parent name. Overrides BundleInterface::getParent
Bundle::getPath public function Gets the Bundle directory path. Overrides BundleInterface::getPath
Bundle::registerCommands public function Finds and registers Commands.
Bundle::shutdown public function Shutdowns the Bundle. Overrides BundleInterface::shutdown
ContainerAware::$container protected property @api
ContainerAware::setContainer public function Sets the Container associated with this Controller. Overrides ContainerAwareInterface::setContainer
CoreBundle::build public function Implements \Symfony\Component\HttpKernel\Bundle\BundleInterface::build(). Overrides Bundle::build