class RegisterEntityResolversCompilerPass

Same name and namespace in other branches
  1. 8.9.x core/modules/serialization/src/RegisterEntityResolversCompilerPass.php \Drupal\serialization\RegisterEntityResolversCompilerPass
  2. 10 core/modules/serialization/src/RegisterEntityResolversCompilerPass.php \Drupal\serialization\RegisterEntityResolversCompilerPass
  3. 11.x core/modules/serialization/src/RegisterEntityResolversCompilerPass.php \Drupal\serialization\RegisterEntityResolversCompilerPass

Adds services tagged 'entity_resolver' to the Serializer.

Hierarchy

Expanded class hierarchy of RegisterEntityResolversCompilerPass

File

core/modules/serialization/src/RegisterEntityResolversCompilerPass.php, line 12

Namespace

Drupal\serialization
View source
class RegisterEntityResolversCompilerPass implements CompilerPassInterface {
  
  /**
   * Adds services to the Serializer.
   *
   * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
   *   The container to process.
   */
  public function process(ContainerBuilder $container) {
    $definition = $container->getDefinition('serializer.entity_resolver');
    $resolvers = [];
    // Retrieve registered Normalizers and Encoders from the container.
    foreach ($container->findTaggedServiceIds('entity_resolver') as $id => $attributes) {
      $priority = $attributes[0]['priority'] ?? 0;
      $resolvers[$priority][] = new Reference($id);
    }
    // Add the registered concrete EntityResolvers to the ChainEntityResolver.
    foreach ($this->sort($resolvers) as $resolver) {
      $definition->addMethodCall('addResolver', [
        $resolver,
      ]);
    }
  }
  
  /**
   * Sorts by priority.
   *
   * Order services from highest priority number to lowest (reverse sorting).
   *
   * @param array $services
   *   A nested array keyed on priority number. For each priority number, the
   *   value is an array of Symfony\Component\DependencyInjection\Reference
   *   objects, each a reference to a normalizer or encoder service.
   *
   * @return array
   *   A flattened array of Reference objects from $services, ordered from high
   *   to low priority.
   */
  protected function sort($services) {
    krsort($services);
    return array_merge([], ...$services);
  }

}

Members

Title Sort descending Modifiers Object type Summary
RegisterEntityResolversCompilerPass::process public function Adds services to the Serializer.
RegisterEntityResolversCompilerPass::sort protected function Sorts by priority.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.