You are here

public function DynamicEntityReferenceServiceProvider::alter in Dynamic Entity Reference 8.2

Same name and namespace in other branches
  1. 8 src/DynamicEntityReferenceServiceProvider.php \Drupal\dynamic_entity_reference\DynamicEntityReferenceServiceProvider::alter()

Modifies existing service definitions.

Parameters

ContainerBuilder $container: The ContainerBuilder whose service definitions can be altered.

Overrides ServiceProviderBase::alter

File

src/DynamicEntityReferenceServiceProvider.php, line 22

Class

DynamicEntityReferenceServiceProvider
Service Provider for Dynamic Entity Reference.

Namespace

Drupal\dynamic_entity_reference

Code

public function alter(ContainerBuilder $container) {
  $modules = $container
    ->getParameter('container.modules');
  if (isset($modules['hal'])) {

    // Hal module is enabled, add our new normalizer for dynamic entity
    // reference items.
    // To avoid problems the arguments to
    // \Drupal\hal\Normalizer\EntityReferenceItemNormalizer change, re-use
    // the same constructor arguments and set the additional dependency
    // with a setter method.
    $parent_definition = $container
      ->getDefinition('serializer.normalizer.entity_reference_item.hal');
    $service_definition = new Definition(DynamicEntityReferenceItemNormalizer::class, $parent_definition
      ->getArguments());

    // The priority must be higher than that of
    // serializer.normalizer.entity_reference_item.hal in
    // hal.services.yml.
    $service_definition
      ->addTag('normalizer', [
      'priority' => $parent_definition
        ->getTags()['normalizer'][0]['priority'] + 1,
    ]);
    $container
      ->setDefinition('serializer.normalizer.entity.dynamic_entity_reference_item.hal', $service_definition);
  }
  $map = [
    'entity.query.sql' => [
      'old' => BaseQueryFactory::class,
      'new' => QueryFactory::class,
    ],
    'pgsql.entity.query.sql' => [
      'old' => BasePgsqlQueryFactory::class,
      'new' => PgsqlQueryFactory::class,
    ],
  ];
  foreach ($map as $service_id => $data) {
    if ($container
      ->hasDefinition($service_id)) {
      $service_definition = $container
        ->getDefinition($service_id);
      if ($service_definition
        ->getClass() == $data['old']) {
        $service_definition
          ->setClass($data['new']);
        $container
          ->setDefinition($service_id, $service_definition);
      }
    }
  }
}