Skip to content

Instantly share code, notes, and snippets.

@skmedix
Created December 13, 2025 21:56
Show Gist options
  • Select an option

  • Save skmedix/9ef91df9c78e929206cb3cf8d1f3f39e to your computer and use it in GitHub Desktop.

Select an option

Save skmedix/9ef91df9c78e929206cb3cf8d1f3f39e to your computer and use it in GitHub Desktop.
diff --git a/config/alternate_listener.php b/config/alternate_listener.php
new file mode 100644
index 00000000..c2593ec6
--- /dev/null
+++ b/config/alternate_listener.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace Symfony\Component\DependencyInjection\Loader\Configurator;
+
+use Presta\SitemapBundle\Event\SitemapAddUrlEvent;
+use Presta\SitemapBundle\EventListener\StaticRoutesAlternateEventListener;
+
+return static function (ContainerConfigurator $container) {
+ $services = $container->services();
+
+ $services->set('presta_sitemap.event_listener.static_routes_alternate', StaticRoutesAlternateEventListener::class)
+ ->args([
+ service('router'),
+ '%presta_sitemap.alternate%',
+ ])
+ ->tag('kernel.event_listener', ['event' => SitemapAddUrlEvent::class, 'method' => 'addAlternate']);
+};
diff --git a/config/messenger.php b/config/messenger.php
new file mode 100644
index 00000000..9d694f13
--- /dev/null
+++ b/config/messenger.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace Symfony\Component\DependencyInjection\Loader\Configurator;
+
+use Presta\SitemapBundle\Messenger\DumpSitemapMessage;
+use Presta\SitemapBundle\Messenger\DumpSitemapMessageHandler;
+
+return static function (ContainerConfigurator $container) {
+ $services = $container->services();
+
+ $services->set('presta_sitemap.messenger.message_handler', DumpSitemapMessageHandler::class)
+ ->args([
+ service('router'),
+ service('presta_sitemap.dumper'),
+ '%presta_sitemap.dump_directory%',
+ ])
+ ->tag('messenger.message_handler', ['handles' => DumpSitemapMessage::class]);
+};
diff --git a/config/route_annotation_listener.php b/config/route_annotation_listener.php
new file mode 100644
index 00000000..892e94c4
--- /dev/null
+++ b/config/route_annotation_listener.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace Symfony\Component\DependencyInjection\Loader\Configurator;
+
+use Presta\SitemapBundle\Event\SitemapPopulateEvent;
+use Presta\SitemapBundle\EventListener\RouteAnnotationEventListener;
+
+return static function (ContainerConfigurator $container) {
+ $services = $container->services();
+ $parameters = $container->parameters();
+ $parameters->set('presta_sitemap.eventlistener.route_annotation.class', RouteAnnotationEventListener::class);
+
+ $services->set('presta_sitemap.eventlistener.route_annotation', '%presta_sitemap.eventlistener.route_annotation.class%')
+ ->args([
+ service('router'),
+ service('event_dispatcher'),
+ '%presta_sitemap.default_section%',
+ ])
+ ->tag('kernel.event_listener', ['event' => SitemapPopulateEvent::class, 'method' => 'registerRouteAnnotation']);
+};
diff --git a/config/routing.php b/config/routing.php
new file mode 100644
index 00000000..01f2836d
--- /dev/null
+++ b/config/routing.php
@@ -0,0 +1,15 @@
+<?php
+
+use Presta\SitemapBundle\Controller\SitemapController;
+use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
+
+return static function (RoutingConfigurator $routes): void {
+ $routes->add('PrestaSitemapBundle_index', '/%presta_sitemap.sitemap_file_prefix%.{_format}')
+ ->controller([SitemapController::class, 'indexAction'])
+ ->requirements(['_format' => 'xml']);
+
+ $routes->add('PrestaSitemapBundle_section', '/%presta_sitemap.sitemap_file_prefix%.{name}.{_format}')
+ ->controller([SitemapController::class, 'sectionAction'])
+ ->requirements(['_format' => 'xml']);
+};
+
diff --git a/config/services.php b/config/services.php
new file mode 100644
index 00000000..995ce0cf
--- /dev/null
+++ b/config/services.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace Symfony\Component\DependencyInjection\Loader\Configurator;
+
+use Presta\SitemapBundle\Command\DumpSitemapsCommand;
+use Presta\SitemapBundle\Controller\SitemapController;
+use Presta\SitemapBundle\Service\Dumper;
+use Presta\SitemapBundle\Service\DumperInterface;
+use Presta\SitemapBundle\Service\Generator;
+use Presta\SitemapBundle\Service\GeneratorInterface;
+
+return static function (ContainerConfigurator $container) {
+ $services = $container->services();
+ $parameters = $container->parameters();
+ $parameters->set('presta_sitemap.generator.class', Generator::class);
+ $parameters->set('presta_sitemap.dumper.class', Dumper::class);
+
+ $services->set('presta_sitemap.generator_default', '%presta_sitemap.generator.class%')
+ ->args([
+ service('event_dispatcher'),
+ service('router'),
+ '%presta_sitemap.items_by_set%',
+ ])
+ ->call('setDefaults', ['%presta_sitemap.defaults%']);
+
+ $services->set('presta_sitemap.dumper_default', '%presta_sitemap.dumper.class%')
+ ->args([
+ service('event_dispatcher'),
+ service('filesystem'),
+ service('router'),
+ '%presta_sitemap.sitemap_file_prefix%',
+ '%presta_sitemap.items_by_set%',
+ ])
+ ->call('setDefaults', ['%presta_sitemap.defaults%']);
+
+ $services->set('presta_sitemap.dump_command', DumpSitemapsCommand::class)
+ ->public()
+ ->autoconfigure()
+ ->args([
+ service('router'),
+ service('presta_sitemap.dumper'),
+ '%presta_sitemap.dump_directory%',
+ ])
+ ->tag('console.command');
+
+ $services->alias(GeneratorInterface::class, 'presta_sitemap.generator');
+
+ $services->alias(DumperInterface::class, 'presta_sitemap.dumper');
+
+ $services->alias(SitemapController::class, 'presta_sitemap.controller')
+ ->public();
+
+ $services->set('presta_sitemap.controller', SitemapController::class)
+ ->public()
+ ->args([
+ service('presta_sitemap.generator'),
+ '%presta_sitemap.timetolive%',
+ ]);
+};
diff --git a/src/DependencyInjection/PrestaSitemapExtension.php b/src/DependencyInjection/PrestaSitemapExtension.php
index cc393651..78a27377 100644
--- a/src/DependencyInjection/PrestaSitemapExtension.php
+++ b/src/DependencyInjection/PrestaSitemapExtension.php
@@ -30,8 +30,8 @@ public function load(array $configs, ContainerBuilder $container): void
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
- $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__ . '/../../config'));
- $loader->load('services.xml');
+ $loader = new Loader\PhpFileLoader($container, new FileLocator(__DIR__ . '/../../config'));
+ $loader->load('services.php');
$container->setParameter($this->getAlias() . '.dump_directory', (string)$config['dump_directory']);
$container->setParameter($this->getAlias() . '.timetolive', (int)$config['timetolive']);
@@ -41,16 +41,16 @@ public function load(array $configs, ContainerBuilder $container): void
$container->setParameter($this->getAlias() . '.default_section', (string)$config['default_section']);
if (true === $config['route_annotation_listener']) {
- $loader->load('route_annotation_listener.xml');
+ $loader->load('route_annotation_listener.php');
if ($this->isConfigEnabled($container, $config['alternate'])) {
$container->setParameter($this->getAlias() . '.alternate', $config['alternate']);
- $loader->load('alternate_listener.xml');
+ $loader->load('alternate_listener.php');
}
}
if (interface_exists(MessageBusInterface::class)) {
- $loader->load('messenger.xml');
+ $loader->load('messenger.php');
}
$generator = $container->setAlias('presta_sitemap.generator', $config['generator']);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment