class BackendCompilerPass
Defines a compiler pass to allow automatic override per backend.
A module developer has to tag a backend service with "backend_overridable":
custom_service:
  class: ...
  tags:
    - { name: backend_overridable }
As a site admin you set the 'default_backend' in your services.yml file:
parameters:
default_backend:
sqlite;As a developer for alternative storage engines you register a service with $your_backend.$original_service:
sqlite.custom_service:
  class: ...
Hierarchy
- class \Drupal\Core\DependencyInjection\Compiler\BackendCompilerPass implements \Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface
Expanded class hierarchy of BackendCompilerPass
2 files declare their use of BackendCompilerPass
- BackendCompilerPassTest.php in core/tests/ Drupal/ Tests/ Core/ DependencyInjection/ Compiler/ BackendCompilerPassTest.php 
- CoreServiceProvider.php in core/lib/ Drupal/ Core/ CoreServiceProvider.php 
File
- 
              core/lib/ Drupal/ Core/ DependencyInjection/ Compiler/ BackendCompilerPass.php, line 34 
Namespace
Drupal\Core\DependencyInjection\CompilerView source
class BackendCompilerPass implements CompilerPassInterface {
  
  /**
   * {@inheritdoc}
   *
   * phpcs:ignore Drupal.Commenting.FunctionComment.VoidReturn
   * @return void
   */
  public function process(ContainerBuilder $container) {
    $driver_backend = NULL;
    if ($container->hasParameter('default_backend')) {
      $default_backend = $container->getParameter('default_backend');
      // Opt out from the default backend.
      if (!$default_backend) {
        return;
      }
    }
    else {
      try {
        $driver_backend = $container->get('database')
          ->driver();
        $default_backend = $container->get('database')
          ->databaseType();
        $container->set('database', NULL);
      } catch (\Exception $e) {
        // If Drupal is not installed or a test doesn't define database there
        // is nothing to override.
        return;
      }
    }
    foreach ($container->findTaggedServiceIds('backend_overridable') as $id => $attributes) {
      // If the service is already an alias it is not the original backend, so
      // we don't want to fallback to other storages any longer.
      if ($container->hasAlias($id)) {
        continue;
      }
      if ($container->hasDefinition("{$driver_backend}.{$id}") || $container->hasAlias("{$driver_backend}.{$id}")) {
        $container->setAlias($id, new Alias("{$driver_backend}.{$id}"));
      }
      elseif ($container->hasDefinition("{$default_backend}.{$id}") || $container->hasAlias("{$default_backend}.{$id}")) {
        $container->setAlias($id, new Alias("{$default_backend}.{$id}"));
      }
    }
  }
}Members
| Title Sort descending | Modifiers | Object type | Summary | 
|---|---|---|---|
| BackendCompilerPass::process | public | function | phpcs:ignore Drupal.Commenting.FunctionComment.VoidReturn | 
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.
