Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 2  | 
      CRAP |         | 
      0.00%  | 
      0 / 28  | 
     
| RegisterSerializationClassesCompilerPass |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 2  | 
      110 |         | 
      0.00%  | 
      0 / 28  | 
     
| process |         | 
      0.00%  | 
      0 / 1  | 
      72 |         | 
      0.00%  | 
      0 / 21  | 
     |||
| sort |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 7  | 
     |||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\serialization\RegisterSerializationClassesCompilerPass. | |
| */ | |
| namespace Drupal\serialization; | |
| use Symfony\Component\DependencyInjection\Reference; | |
| use Symfony\Component\DependencyInjection\ContainerBuilder; | |
| use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; | |
| /** | |
| * Adds services tagged 'normalizer' and 'encoder' to the Serializer. | |
| */ | |
| class RegisterSerializationClassesCompilerPass 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'); | |
| // Retrieve registered Normalizers and Encoders from the container. | |
| foreach ($container->findTaggedServiceIds('normalizer') as $id => $attributes) { | |
| $priority = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0; | |
| $normalizers[$priority][] = new Reference($id); | |
| } | |
| foreach ($container->findTaggedServiceIds('encoder') as $id => $attributes) { | |
| $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)); | |
| } | |
| // Find all serialization formats known. | |
| $formats = array(); | |
| foreach ($container->findTaggedServiceIds('encoder') as $attributes) { | |
| $formats[] = $attributes[0]['format']; | |
| } | |
| $container->setParameter('serializer.formats', $formats); | |
| } | |
| /** | |
| * 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) { | |
| $sorted = array(); | |
| krsort($services); | |
| // Flatten the array. | |
| foreach ($services as $a) { | |
| $sorted = array_merge($sorted, $a); | |
| } | |
| return $sorted; | |
| } | |
| } |