vendor/api-platform/core/src/Symfony/Bundle/DependencyInjection/Compiler/DataProviderPass.php line 58

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the API Platform project.
  4.  *
  5.  * (c) Kévin Dunglas <dunglas@gmail.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. declare(strict_types=1);
  11. namespace ApiPlatform\Symfony\Bundle\DependencyInjection\Compiler;
  12. use ApiPlatform\Core\Api\OperationType;
  13. use ApiPlatform\Core\DataProvider\SerializerAwareDataProviderInterface;
  14. use ApiPlatform\State\SerializerAwareProviderInterface;
  15. use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
  16. use Symfony\Component\DependencyInjection\ContainerBuilder;
  17. use Symfony\Component\DependencyInjection\Reference;
  18. /**
  19.  * Registers data providers.
  20.  *
  21.  * @internal
  22.  *
  23.  * @author Kévin Dunglas <dunglas@gmail.com>
  24.  * @author Vincent Chalamon <vincentchalamon@gmail.com>
  25.  */
  26. final class DataProviderPass implements CompilerPassInterface
  27. {
  28.     /**
  29.      * {@inheritdoc}
  30.      */
  31.     public function process(ContainerBuilder $container)
  32.     {
  33.         foreach (OperationType::TYPES as $type) {
  34.             $this->addSerializerLocator($container$type);
  35.         }
  36.         $services $container->findTaggedServiceIds('api_platform.state_provider'true);
  37.         foreach ($services as $id => $tags) {
  38.             $definition $container->getDefinition((string) $id);
  39.             if (is_a($definition->getClass(), SerializerAwareProviderInterface::class, true)) {
  40.                 $definition->addMethodCall('setSerializerLocator', [new Reference('api_platform.serializer_locator')]);
  41.             }
  42.         }
  43.     }
  44.     private function addSerializerLocator(ContainerBuilder $containerstring $type): void
  45.     {
  46.         $services $container->findTaggedServiceIds("api_platform.{$type}_data_provider"true);
  47.         foreach ($services as $id => $tags) {
  48.             $definition $container->getDefinition((string) $id);
  49.             if (is_a($definition->getClass(), SerializerAwareDataProviderInterface::class, true)) {
  50.                 $definition->addMethodCall('setSerializerLocator', [new Reference('api_platform.serializer_locator')]);
  51.             }
  52.         }
  53.     }
  54. }
  55. class_alias(DataProviderPass::class, \ApiPlatform\Core\Bridge\Symfony\Bundle\DependencyInjection\Compiler\DataProviderPass::class);