diff --git a/src/Prime/Http/ResponseExtension.php b/src/Prime/Http/ResponseExtension.php index 2b4953a5..0ecaa173 100644 --- a/src/Prime/Http/ResponseExtension.php +++ b/src/Prime/Http/ResponseExtension.php @@ -75,7 +75,6 @@ final class ResponseExtension { return !$request->isXmlHttpRequest() && $request->isHtmlRequestFormat() - && $request->hasSession() && !$response->isRedirection() && $response->isHtml() && !$response->isAttachment() diff --git a/src/Symfony/DependencyInjection/FlasherExtension.php b/src/Symfony/DependencyInjection/FlasherExtension.php index c152f083..c212f0de 100644 --- a/src/Symfony/DependencyInjection/FlasherExtension.php +++ b/src/Symfony/DependencyInjection/FlasherExtension.php @@ -8,6 +8,7 @@ namespace Flasher\Symfony\DependencyInjection; use Flasher\Prime\Config\ConfigInterface; +use Flasher\Symfony\Bridge\Bridge; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -36,6 +37,7 @@ final class FlasherExtension extends Extension implements CompilerPassInterface $this->registerFlasherConfiguration($config, $container); $this->registerListeners($config, $container); $this->registerStorageManager($config, $container); + $this->registerHttpExtensions($config, $container); $this->registerFlasherAutoConfiguration($container); } @@ -46,33 +48,7 @@ final class FlasherExtension extends Extension implements CompilerPassInterface { $this->registerFlasherTranslator($container); $this->registerFlasherTemplateEngine($container); - } - - private function registerFlasherTranslator(ContainerBuilder $container) - { - $config = $container->getDefinition('flasher.config')->getArgument(0); - - $translationListener = $container->getDefinition('flasher.translation_listener'); - $translationListener->replaceArgument(1, $config['auto_translate']); // @phpstan-ignore-line - - if ($container->has('translator')) { - return; - } - - $container->removeDefinition('flasher.translator'); - $translationListener->replaceArgument(0, null); - } - - private function registerFlasherTemplateEngine(ContainerBuilder $container) - { - if ($container->has('twig')) { - return; - } - - $container->removeDefinition('flasher.template_engine'); - - $listener = $container->getDefinition('flasher.resource_manager'); - $listener->replaceArgument(1, null); + $this->configureSessionServices($container); } /** @@ -99,11 +75,6 @@ final class FlasherExtension extends Extension implements CompilerPassInterface */ private function registerListeners(array $config, ContainerBuilder $container) { - $this->registerResponseExtension($container); - - $mapping = $config['flash_bag']['mapping']; - $this->registerRequestExtension($container, $mapping); - $this->registerSessionListener($config, $container); $this->registerFlasherListener($config, $container); } @@ -177,6 +148,17 @@ final class FlasherExtension extends Extension implements CompilerPassInterface $storageManager->replaceArgument(2, $criteria); } + /** + * @return void + */ + private function registerHttpExtensions(array $config, ContainerBuilder $container) + { + $mapping = $config['flash_bag']['mapping']; + $this->registerRequestExtension($container, $mapping); + + $this->registerResponseExtension($container); + } + /** * @return void */ @@ -190,4 +172,64 @@ final class FlasherExtension extends Extension implements CompilerPassInterface ->registerForAutoconfiguration('Flasher\Prime\Aware\FlasherAwareInterface') ->addTag('flasher.flasher_aware'); } + + /** + * @return void + */ + private function registerFlasherTranslator(ContainerBuilder $container) + { + $config = $container->getDefinition('flasher.config')->getArgument(0); + + $translationListener = $container->getDefinition('flasher.translation_listener'); + $translationListener->replaceArgument(1, $config['auto_translate']); // @phpstan-ignore-line + + if ($container->has('translator')) { + return; + } + + $container->removeDefinition('flasher.translator'); + $translationListener->replaceArgument(0, null); + } + + /** + * @return void + */ + private function registerFlasherTemplateEngine(ContainerBuilder $container) + { + if ($container->has('twig')) { + return; + } + + $container->removeDefinition('flasher.template_engine'); + + $listener = $container->getDefinition('flasher.resource_manager'); + $listener->replaceArgument(1, null); + } + + /** + * @return void + */ + private function configureSessionServices(ContainerBuilder $container) + { + if ($this->isSessionEnabled($container)) { + return; + } + + $container->removeDefinition('flasher.storage_bag'); + $container->removeDefinition('flasher.session_listener'); + + $container->register('flasher.storage_bag', 'Flasher\Prime\Storage\Bag\ArrayBag'); + } + + /** + * @return bool + */ + private function isSessionEnabled(ContainerBuilder $container) + { + if (Bridge::versionCompare('5.3', '>=')) { + return $container->has('session.factory'); + } + + return $container->has('session'); + } }