diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
index afa04d7cad..35cc7b1b4d 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
@@ -168,14 +168,6 @@ class SecurityExtension extends Extension implements PrependExtensionInterface
$container->getDefinition('security.authentication.guard_handler')
->replaceArgument(2, $this->statelessFirewallKeys);
- if ($this->authenticatorManagerEnabled) {
- foreach ($this->statelessFirewallKeys as $statelessFirewallId) {
- $container
- ->setDefinition('security.listener.session.'.$statelessFirewallId, new ChildDefinition('security.listener.session'))
- ->addTag('kernel.event_subscriber', ['dispatcher' => 'security.event_dispatcher.'.$statelessFirewallId]);
- }
- }
-
if ($config['encoders']) {
$this->createEncoders($config['encoders'], $container);
}
@@ -373,6 +365,12 @@ class SecurityExtension extends Extension implements PrependExtensionInterface
$contextKey = $firewall['context'] ?? $id;
$listeners[] = new Reference($contextListenerId = $this->createContextListener($container, $contextKey));
$sessionStrategyId = 'security.authentication.session_strategy';
+
+ if ($this->authenticatorManagerEnabled) {
+ $container
+ ->setDefinition('security.listener.session.'.$id, new ChildDefinition('security.listener.session'))
+ ->addTag('kernel.event_subscriber', ['dispatcher' => $firewallEventDispatcherId]);
+ }
} else {
$this->statelessFirewallKeys[] = $id;
$sessionStrategyId = 'security.authentication.session_strategy_noop';
diff --git a/src/Symfony/Bundle/SecurityBundle/Resources/config/security_authenticator.xml b/src/Symfony/Bundle/SecurityBundle/Resources/config/security_authenticator.xml
index fa9f94aeae..65bc755941 100644
--- a/src/Symfony/Bundle/SecurityBundle/Resources/config/security_authenticator.xml
+++ b/src/Symfony/Bundle/SecurityBundle/Resources/config/security_authenticator.xml
@@ -63,7 +63,6 @@
class="Symfony\Component\Security\Http\EventListener\SessionStrategyListener"
abstract="true">
- stateless firewall keys
getRawContainer();
+
+ $firewallId = 'stateless_firewall';
+ $container->loadFromExtension('security', [
+ 'enable_authenticator_manager' => true,
+ 'firewalls' => [
+ $firewallId => [
+ 'pattern' => '/.*',
+ 'stateless' => true,
+ 'http_basic' => null,
+ ],
+ ],
+ ]);
+
+ $container->compile();
+
+ $this->assertFalse($container->has('security.listener.session.'.$firewallId));
+ }
+
+ public function testCompilesWithSessionListenerWithStatefulllFirewallWithAuthenticationManager()
+ {
+ $container = $this->getRawContainer();
+
+ $firewallId = 'statefull_firewall';
+ $container->loadFromExtension('security', [
+ 'enable_authenticator_manager' => true,
+ 'firewalls' => [
+ $firewallId => [
+ 'pattern' => '/.*',
+ 'stateless' => false,
+ 'http_basic' => null,
+ ],
+ ],
+ ]);
+
+ $container->compile();
+
+ $this->assertTrue($container->has('security.listener.session.'.$firewallId));
+ }
+
protected function getRawContainer()
{
$container = new ContainerBuilder();
diff --git a/src/Symfony/Component/Console/Cursor.php b/src/Symfony/Component/Console/Cursor.php
index 9f8be9649c..2da899b556 100644
--- a/src/Symfony/Component/Console/Cursor.php
+++ b/src/Symfony/Component/Console/Cursor.php
@@ -21,10 +21,10 @@ final class Cursor
private $output;
private $input;
- public function __construct(OutputInterface $output, $input = STDIN)
+ public function __construct(OutputInterface $output, $input = null)
{
$this->output = $output;
- $this->input = $input;
+ $this->input = $input ?? (\defined('STDIN') ? STDIN : fopen('php://input', 'r+'));
}
public function moveUp(int $lines = 1): self
diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/ConnectionTest.php b/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/ConnectionTest.php
index ef94e60f44..30ac59790e 100644
--- a/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/ConnectionTest.php
+++ b/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/ConnectionTest.php
@@ -13,13 +13,13 @@ namespace Symfony\Component\Messenger\Bridge\Doctrine\Tests\Transport;
use Doctrine\DBAL\DBALException;
use Doctrine\DBAL\Driver\ResultStatement;
-use Doctrine\DBAL\ForwardCompatibility\Driver\ResultStatement as ForwardCompatibleResultStatement;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Query\QueryBuilder;
use Doctrine\DBAL\Schema\AbstractSchemaManager;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\DBAL\Schema\SchemaConfig;
use Doctrine\DBAL\Schema\Synchronizer\SchemaSynchronizer;
+use Doctrine\DBAL\Statement;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Messenger\Bridge\Doctrine\Tests\Fixtures\DummyMessage;
use Symfony\Component\Messenger\Bridge\Doctrine\Transport\Connection;
@@ -146,14 +146,10 @@ class ConnectionTest extends TestCase
private function getStatementMock($expectedResult): ResultStatement
{
- $mockedInterface = interface_exists(ForwardCompatibleResultStatement::class)
- ? ForwardCompatibleResultStatement::class
- : ResultStatement::class;
-
- $stmt = $this->createMock($mockedInterface);
+ $stmt = $this->createMock(Statement::class);
$stmt->expects($this->once())
- ->method(method_exists($mockedInterface, 'fetchAssociative') ? 'fetchAssociative' : 'fetch')
+ ->method(method_exists(Statement::class, 'fetchAssociative') ? 'fetchAssociative' : 'fetch')
->willReturn($expectedResult);
return $stmt;
@@ -315,12 +311,9 @@ class ConnectionTest extends TestCase
'headers' => json_encode(['type' => DummyMessage::class]),
];
- $mockedInterface = interface_exists(ForwardCompatibleResultStatement::class)
- ? ForwardCompatibleResultStatement::class
- : ResultStatement::class;
- $stmt = $this->createMock($mockedInterface);
+ $stmt = $this->createMock(Statement::class);
$stmt->expects($this->once())
- ->method(method_exists($mockedInterface, 'fetchAllAssociative') ? 'fetchAllAssociative' : 'fetchAll')
+ ->method(method_exists(Statement::class, 'fetchAllAssociative') ? 'fetchAllAssociative' : 'fetchAll')
->willReturn([$message1, $message2]);
$driverConnection