You are here

public function RegisterSerializationClassesCompilerPass::process in JSON:API 8

Same name and namespace in other branches
  1. 8.2 src/DependencyInjection/Compiler/RegisterSerializationClassesCompilerPass.php \Drupal\jsonapi\DependencyInjection\Compiler\RegisterSerializationClassesCompilerPass::process()

Adds services to the JSON API Serializer.

This code is copied from the class parent with two modifications. The service id has been changed and the service tag has been updated.

ID: 'serializer' -> 'jsonapi.serializer_do_not_use_removal_imminent' Tag: 'normalizer' -> 'jsonapi_normalizer_do_not_use_removal_imminent'

Parameters

\Symfony\Component\DependencyInjection\ContainerBuilder $container: The container to process.

Overrides RegisterSerializationClassesCompilerPass::process

File

src/DependencyInjection/Compiler/RegisterSerializationClassesCompilerPass.php, line 57

Class

RegisterSerializationClassesCompilerPass
Adds services tagged JSON API-only normalizers to the Serializer.

Namespace

Drupal\jsonapi\DependencyInjection\Compiler

Code

public function process(ContainerBuilder $container) {
  $definition = $container
    ->getDefinition(static::OVERRIDDEN_SERVICE_ID);

  // Retrieve registered Normalizers and Encoders from the container.
  foreach ($container
    ->findTaggedServiceIds(static::OVERRIDDEN_SERVICE_TAG) as $id => $attributes) {

    // Normalizers are not an API: mark private.
    $container
      ->getDefinition($id)
      ->setPublic(FALSE);

    // If there is a BC key present, pass this to determine if the normalizer
    // should be skipped.
    if (isset($attributes[0]['bc']) && $this
      ->normalizerBcSettingIsEnabled($attributes[0]['bc'], $attributes[0]['bc_config_name'])) {
      continue;
    }
    $priority = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
    $normalizers[$priority][] = new Reference($id);
  }
  foreach ($container
    ->findTaggedServiceIds('encoder') as $id => $attributes) {

    // Encoders are not an API: mark private.
    $container
      ->getDefinition($id)
      ->setPublic(FALSE);
    $priority = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
    $encoders[$priority][] = new Reference($id);
  }

  // Add the registered Normalizers and Encoders to the Serializer.
  if (!empty($normalizers)) {
    $definition
      ->replaceArgument(0, $this
      ->sort($normalizers));
  }
  if (!empty($encoders)) {
    $definition
      ->replaceArgument(1, $this
      ->sort($encoders));
  }

  // Set the JSON API format and format_provider.
  $container
    ->setParameter(static::OVERRIDDEN_SERVICE_ID . '.formats', [
    static::FORMAT,
  ]);
  $container
    ->setParameter(static::OVERRIDDEN_SERVICE_ID . '.format_providers', [
    static::FORMAT => 'jsonapi',
  ]);
}