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 $configs, ContainerBuilder $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. }