diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
index b3a7095cce..1d4f669ad5 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
@@ -313,6 +313,7 @@ class FrameworkExtension extends Extension
$container->removeDefinition('console.command.messenger_failed_messages_retry');
$container->removeDefinition('console.command.messenger_failed_messages_show');
$container->removeDefinition('console.command.messenger_failed_messages_remove');
+ $container->removeDefinition('cache.messenger.restart_workers_signal');
}
if ($this->httpClientConfigEnabled = $this->isConfigEnabled($container, $config['http_client'])) {
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
index ae1c75dcc9..170faa0bbe 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
@@ -425,6 +425,7 @@
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_disabled.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_disabled.php
new file mode 100644
index 0000000000..e02542d977
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_disabled.php
@@ -0,0 +1,5 @@
+loadFromExtension('framework', [
+ 'messenger' => false,
+]);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_disabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_disabled.xml
new file mode 100644
index 0000000000..6f57398b30
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_disabled.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_disabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_disabled.yml
new file mode 100644
index 0000000000..1b2d2d1a4f
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_disabled.yml
@@ -0,0 +1,2 @@
+framework:
+ messenger: false
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
index 99d9fc6ece..e80b52a0c2 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
@@ -668,9 +668,23 @@ abstract class FrameworkExtensionTest extends TestCase
$this->assertTrue($container->hasDefinition('web_link.add_link_header_listener'));
}
+ public function testMessengerServicesRemovedWhenDisabled()
+ {
+ $container = $this->createContainerFromFile('messenger_disabled');
+ $this->assertFalse($container->hasDefinition('console.command.messenger_consume_messages'));
+ $this->assertFalse($container->hasDefinition('console.command.messenger_debug'));
+ $this->assertFalse($container->hasDefinition('console.command.messenger_stop_workers'));
+ $this->assertFalse($container->hasDefinition('console.command.messenger_setup_transports'));
+ $this->assertFalse($container->hasDefinition('console.command.messenger_failed_messages_retry'));
+ $this->assertFalse($container->hasDefinition('console.command.messenger_failed_messages_show'));
+ $this->assertFalse($container->hasDefinition('console.command.messenger_failed_messages_remove'));
+ $this->assertFalse($container->hasDefinition('cache.messenger.restart_workers_signal'));
+ }
+
public function testMessenger()
{
$container = $this->createContainerFromFile('messenger');
+ $this->assertTrue($container->hasDefinition('console.command.messenger_consume_messages'));
$this->assertTrue($container->hasAlias('message_bus'));
$this->assertTrue($container->getAlias('message_bus')->isPublic());
$this->assertTrue($container->hasAlias('messenger.default_bus'));
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ResolveBindingsPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ResolveBindingsPass.php
index e76c43b150..4df81b1183 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/ResolveBindingsPass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/ResolveBindingsPass.php
@@ -114,6 +114,8 @@ class ResolveBindingsPass extends AbstractRecursivePass
return parent::processValue($value, $isRoot);
}
+ $bindingNames = [];
+
foreach ($bindings as $key => $binding) {
list($bindingValue, $bindingId, $used, $bindingType, $file) = $binding->getValues();
if ($used) {
@@ -123,7 +125,11 @@ class ResolveBindingsPass extends AbstractRecursivePass
$this->unusedBindings[$bindingId] = [$key, $this->currentId, $bindingType, $file];
}
- if (preg_match('/^(?:(?:array|bool|float|int|string) )?\$/', $key)) {
+ if (preg_match('/^(?:(?:array|bool|float|int|string|([^ $]++)) )\$/', $key, $m)) {
+ $bindingNames[substr($key, \strlen($m[0]))] = $binding;
+ }
+
+ if (!isset($m[1])) {
continue;
}
@@ -184,11 +190,17 @@ class ResolveBindingsPass extends AbstractRecursivePass
continue;
}
- if (!$typeHint || '\\' !== $typeHint[0] || !isset($bindings[$typeHint = substr($typeHint, 1)])) {
+ if ($typeHint && '\\' === $typeHint[0] && isset($bindings[$typeHint = substr($typeHint, 1)])) {
+ $arguments[$key] = $this->getBindingValue($bindings[$typeHint]);
+
continue;
}
- $arguments[$key] = $this->getBindingValue($bindings[$typeHint]);
+ if (isset($bindingNames[$parameter->name])) {
+ $bindingKey = array_search($binding, $bindings, true);
+ $argumentType = substr($bindingKey, 0, strpos($bindingKey, ' '));
+ $this->errorMessages[] = sprintf('Did you forget to add the type "%s" to argument "$%s" of method "%s::%s()"?', $argumentType, $parameter->name, $reflectionMethod->class, $reflectionMethod->name);
+ }
}
if ($arguments !== $call[1]) {
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveBindingsPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveBindingsPassTest.php
index 87a5cf2261..443114b0a2 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveBindingsPassTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveBindingsPassTest.php
@@ -20,6 +20,7 @@ use Symfony\Component\DependencyInjection\Compiler\DefinitionErrorExceptionPass;
use Symfony\Component\DependencyInjection\Compiler\ResolveBindingsPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
+use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\DependencyInjection\Tests\Fixtures\CaseSensitiveClass;
use Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy;
@@ -169,4 +170,19 @@ class ResolveBindingsPassTest extends TestCase
$this->assertSame([1 => 'bar'], $container->getDefinition(NamedArgumentsDummy::class)->getArguments());
}
+
+ public function testEmptyBindingTypehint()
+ {
+ $this->expectException(InvalidArgumentException::class);
+ $this->expectExceptionMessage('Did you forget to add the type "string" to argument "$apiKey" of method "Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy::__construct()"?');
+
+ $container = new ContainerBuilder();
+ $bindings = [
+ 'string $apiKey' => new BoundArgument('foo'),
+ ];
+ $definition = $container->register(NamedArgumentsDummy::class, NamedArgumentsDummy::class);
+ $definition->setBindings($bindings);
+ $pass = new ResolveBindingsPass();
+ $pass->process($container);
+ }
}
diff --git a/src/Symfony/Component/HttpClient/Response/ResponseTrait.php b/src/Symfony/Component/HttpClient/Response/ResponseTrait.php
index 158bcef04e..b7b576e564 100644
--- a/src/Symfony/Component/HttpClient/Response/ResponseTrait.php
+++ b/src/Symfony/Component/HttpClient/Response/ResponseTrait.php
@@ -253,7 +253,7 @@ trait ResponseTrait
private static function addResponseHeaders(array $responseHeaders, array &$info, array &$headers, string &$debug = ''): void
{
foreach ($responseHeaders as $h) {
- if (11 <= \strlen($h) && '/' === $h[4] && preg_match('#^HTTP/\d+(?:\.\d+)? ([12345]\d\d) .*#', $h, $m)) {
+ if (11 <= \strlen($h) && '/' === $h[4] && preg_match('#^HTTP/\d+(?:\.\d+)? ([12345]\d\d)(?: |$)#', $h, $m)) {
if ($headers) {
$debug .= "< \r\n";
$headers = [];