vendor/babdev/pagerfanta-bundle/DependencyInjection/BabDevPagerfantaExtension.php line 89

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace BabDev\PagerfantaBundle\DependencyInjection;
  3. use BabDev\PagerfantaBundle\RouteGenerator\RouteGeneratorFactoryInterface as BundleRouteGeneratorFactoryInterface;
  4. use Pagerfanta\RouteGenerator\RouteGeneratorFactoryInterface as PagerfantaRouteGeneratorFactoryInterface;
  5. use Pagerfanta\Twig\Extension\PagerfantaExtension;
  6. use Symfony\Component\Config\FileLocator;
  7. use Symfony\Component\DependencyInjection\Alias;
  8. use Symfony\Component\DependencyInjection\ContainerBuilder;
  9. use Symfony\Component\DependencyInjection\Extension\Extension;
  10. use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
  11. use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
  12. use Symfony\Component\HttpKernel\KernelEvents;
  13. use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
  14. final class BabDevPagerfantaExtension extends Extension implements PrependExtensionInterface
  15. {
  16.     private const DEPRECATED_ALIASES = [
  17.         BundleRouteGeneratorFactoryInterface::class => PagerfantaRouteGeneratorFactoryInterface::class,
  18.     ];
  19.     public function getAlias()
  20.     {
  21.         return 'babdev_pagerfanta';
  22.     }
  23.     public function load(array $configsContainerBuilder $container): void
  24.     {
  25.         $config $this->processConfiguration($this->getConfiguration($configs$container), $configs);
  26.         $container->setParameter('babdev_pagerfanta.default_twig_template'$config['default_twig_template']);
  27.         $container->setParameter('babdev_pagerfanta.default_view'$config['default_view']);
  28.         $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
  29.         $loader->load('pagerfanta.xml');
  30.         /** @var array<string, class-string> $bundles */
  31.         $bundles $container->getParameter('kernel.bundles');
  32.         if (isset($bundles['TwigBundle']) && class_exists(PagerfantaExtension::class)) {
  33.             $loader->load('twig.xml');
  34.         }
  35.         if (isset($bundles['JMSSerializerBundle'])) {
  36.             $loader->load('jms_serializer.xml');
  37.         }
  38.         if (interface_exists(NormalizerInterface::class)) {
  39.             $loader->load('serializer.xml');
  40.         }
  41.         if (Configuration::EXCEPTION_STRATEGY_TO_HTTP_NOT_FOUND === $config['exceptions_strategy']['out_of_range_page']) {
  42.             $container->getDefinition('pagerfanta.event_listener.convert_not_valid_max_per_page_to_not_found')
  43.                 ->addTag(
  44.                     'kernel.event_listener',
  45.                     [
  46.                         'event' => KernelEvents::EXCEPTION,
  47.                         'method' => 'onKernelException',
  48.                         'priority' => 512,
  49.                     ]
  50.                 );
  51.         } else {
  52.             $container->removeDefinition('pagerfanta.event_listener.convert_not_valid_max_per_page_to_not_found');
  53.         }
  54.         if (Configuration::EXCEPTION_STRATEGY_TO_HTTP_NOT_FOUND === $config['exceptions_strategy']['not_valid_current_page']) {
  55.             $container->getDefinition('pagerfanta.event_listener.convert_not_valid_current_page_to_not_found')
  56.                 ->addTag(
  57.                     'kernel.event_listener',
  58.                     [
  59.                         'event' => KernelEvents::EXCEPTION,
  60.                         'method' => 'onKernelException',
  61.                         'priority' => 512,
  62.                     ]
  63.                 );
  64.         } else {
  65.             $container->removeDefinition('pagerfanta.event_listener.convert_not_valid_current_page_to_not_found');
  66.         }
  67.         $this->deprecateAliases($container);
  68.     }
  69.     public function prepend(ContainerBuilder $container): void
  70.     {
  71.         if (!$container->hasExtension('twig')) {
  72.             return;
  73.         }
  74.         if (!class_exists(PagerfantaExtension::class)) {
  75.             return;
  76.         }
  77.         $refl = new \ReflectionClass(PagerfantaExtension::class);
  78.         if (false === $refl->getFileName()) {
  79.             return;
  80.         }
  81.         $path \dirname($refl->getFileName(), 2).'/templates/';
  82.         $container->prependExtensionConfig('twig', ['paths' => [$path => 'Pagerfanta']]);
  83.     }
  84.     private function deprecateAliases(ContainerBuilder $container): void
  85.     {
  86.         if (!method_exists(Alias::class, 'setDeprecated')) {
  87.             return;
  88.         }
  89.         $usesSymfony51Api method_exists(Alias::class, 'getDeprecation');
  90.         foreach (self::DEPRECATED_ALIASES as $aliasId => $replacementAlias) {
  91.             $alias $container->getAlias($aliasId);
  92.             if ($usesSymfony51Api) {
  93.                 $alias->setDeprecated(
  94.                     'babdev/pagerfanta-bundle',
  95.                     '2.5',
  96.                     str_replace('%replacement_alias_id%'$replacementAlias'The "%alias_id%" alias is deprecated and will be removed in BabDevPagerfantaBundle 3.0. Use the "%replacement_alias_id%" alias instead.')
  97.                 );
  98.             } else {
  99.                 $alias->setDeprecated(
  100.                     true,
  101.                     str_replace('%replacement_alias_id%'$replacementAlias'The "%alias_id%" alias is deprecated and will be removed in BabDevPagerfantaBundle 3.0. Use the "%replacement_alias_id%" alias instead.')
  102.                 );
  103.             }
  104.         }
  105.     }
  106. }