diff --git a/composer.json b/composer.json index dee3525..380593f 100644 --- a/composer.json +++ b/composer.json @@ -8,29 +8,23 @@ }, "require": { - "php": "^7.2|8.0.*|8.1.*|8.2.*|8.3.*", + "php": ">= 8.1", "ext-json": "*", - "psr/container": "^1.0", + "psr/container": "^1.0|^2.0", "psr/log": "^1.1|^2.0|^3.0", - "symfony/config": "^4.0|^5.0|^6.0|^7.0", - "symfony/console": "^4.0|^5.0|^6.0|^7.0", - "symfony/dependency-injection": "^4.2|^5.0|^6.0|^7.0", - "symfony/event-dispatcher": "^4.3|^5.0|^6.0|^7.0", - "symfony/event-dispatcher-contracts": "^1.0|^2.0|^3.0", - "symfony/http-foundation": "^5.3|^6.0|^7.0", - "symfony/http-kernel": "^4.0|^5.0|^6.0|^7.0", - "symfony/proxy-manager-bridge": "^4.0|^5.0|^6.0|^7.0", - "symfony/service-contracts": "^1.0|^2.0|^3.0", - "twig/twig": "^1.36|^2.6|^3.0" + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/event-dispatcher-contracts": "^2.5|^3.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3.0", + "twig/twig": "^2.13|^3.0" }, "require-dev": { - "symfony/stopwatch": "^5.4|^6.0|^7.0" - }, - - "suggest": { - "symfony/stopwatch": "um zu messen, wie lange der Aufbau des NavigationTree dauert", - "ocramius/proxy-manager": "damit der NavigationTree wirklich lazy erzeugt wird" + "symfony/stopwatch": "^6.4|^7.0" }, "config": { diff --git a/src/DependencyInjection/WebfactoryNavigationExtension.php b/src/DependencyInjection/WebfactoryNavigationExtension.php index 81bbaec..9e05778 100644 --- a/src/DependencyInjection/WebfactoryNavigationExtension.php +++ b/src/DependencyInjection/WebfactoryNavigationExtension.php @@ -11,13 +11,13 @@ use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Extension\Extension; -use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; +use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; class WebfactoryNavigationExtension extends Extension { public function load(array $configs, ContainerBuilder $container): void { - $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); - $loader->load('services.xml'); + $loader = new PhpFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); + $loader->load('services.php'); } } diff --git a/src/Resources/config/services.php b/src/Resources/config/services.php new file mode 100644 index 0000000..faec7f5 --- /dev/null +++ b/src/Resources/config/services.php @@ -0,0 +1,61 @@ +services(); + + $services->defaults() + ->private() + ->autowire() + ->autoconfigure(); + + $services->set(\Webfactory\Bundle\NavigationBundle\Build\BuildDispatcher::class) + ->share(false); + + $services->alias('webfactory_navigation.tree_factory.dispatcher', \Webfactory\Bundle\NavigationBundle\Build\BuildDispatcher::class) + ->public(); + + $services->set(\Webfactory\Bundle\NavigationBundle\Build\TreeFactory::class) + ->lazy() + ->args([ + service('config_cache_factory'), + '%kernel.cache_dir%/webfactory_navigation/tree.php', + service(\Psr\Container\ContainerInterface::class), + service('event_dispatcher'), + service('logger')->nullOnInvalid(), + service('debug.stopwatch')->nullOnInvalid(), + ]) + ->tag('monolog.logger', ['channel' => 'webfactory_navigation']) + ->tag('container.service_subscriber'); + + $services->alias('webfactory_navigation.tree_factory', \Webfactory\Bundle\NavigationBundle\Build\TreeFactory::class) + ->public(); + + $services->set(\Webfactory\Bundle\NavigationBundle\Tree\Tree::class) + ->lazy() + ->factory([service(\Webfactory\Bundle\NavigationBundle\Build\TreeFactory::class), 'getTree']); + + $services->alias('webfactory_navigation.tree', \Webfactory\Bundle\NavigationBundle\Tree\Tree::class) + ->public(); + + $services->set(\Webfactory\Bundle\NavigationBundle\Event\ActiveNodeEventListener::class) + ->tag('kernel.event_listener', ['event' => 'webfactory_navigation.tree_initialized', 'method' => 'initializeTree']); + + $services->alias('webfactory_navigation.event.active_node_event_listener', \Webfactory\Bundle\NavigationBundle\Event\ActiveNodeEventListener::class); + + $services->set(\Webfactory\Bundle\NavigationBundle\Twig\NavigationExtension::class) + ->tag('twig.extension'); + + $services->alias('webfactory_navigation.twig_extension', \Webfactory\Bundle\NavigationBundle\Twig\NavigationExtension::class); + + $services->set(\Webfactory\Bundle\NavigationBundle\Command\DumpTreeCommand::class) + ->tag('console.command'); + + $services->alias('webfactory_navigation.command.dump_tree_command', \Webfactory\Bundle\NavigationBundle\Command\DumpTreeCommand::class); + + $services->set(\Webfactory\Bundle\NavigationBundle\Command\LookupNodeCommand::class) + ->tag('console.command'); + + $services->alias('webfactory_navigation.command.lookup_node_command', \Webfactory\Bundle\NavigationBundle\Command\LookupNodeCommand::class); +}; diff --git a/src/Resources/config/services.xml b/src/Resources/config/services.xml deleted file mode 100644 index 9f30640..0000000 --- a/src/Resources/config/services.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - %kernel.cache_dir%/webfactory_navigation/tree.php - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -