diff --git a/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterStreamWrappersPass.php b/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterStreamWrappersPass.php index f1ea8cd5b79bb16ad0e3e8ca9811379afe966348..3fa6c3848397c0e76d9c79e0f3a0c2eb06808802 100644 --- a/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterStreamWrappersPass.php +++ b/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterStreamWrappersPass.php @@ -20,11 +20,18 @@ public function process(ContainerBuilder $container) { $stream_wrapper_manager = $container->getDefinition('stream_wrapper_manager'); - foreach ($container->findTaggedServiceIds('stream_wrapper') as $id => $attributes) { + foreach ($container->findTaggedServiceIds('stream_wrapper') as $id => $tags) { $class = $container->getDefinition($id)->getClass(); - $scheme = $attributes[0]['scheme']; - - $stream_wrapper_manager->addMethodCall('addStreamWrapper', [$id, $class, $scheme]); + // Loop through all the tags for this stream wrapper as we may have + // multiple schemes. + foreach ($tags as $attributes) { + $scheme = $attributes['scheme']; + $stream_wrapper_manager->addMethodCall('addStreamWrapper', [ + $id, + $class, + $scheme, + ]); + } } } diff --git a/core/modules/file/tests/file_test/file_test.services.yml b/core/modules/file/tests/file_test/file_test.services.yml index 51b048997a23de7eb625413c5f78827fd5078dc4..e70db1ebd65173b2480a6c076f5ff8880321b423 100644 --- a/core/modules/file/tests/file_test/file_test.services.yml +++ b/core/modules/file/tests/file_test/file_test.services.yml @@ -15,3 +15,8 @@ services: class: Drupal\file_test\StreamWrapper\DummyExternalReadOnlyWrapper tags: - { name: stream_wrapper, scheme: dummy-external-readonly } + stream_wrapper.dummy_multiple: + class: Drupal\file_test\StreamWrapper\DummyMultipleStreamWrapper + tags: + - { name: stream_wrapper, scheme: dummy1 } + - { name: stream_wrapper, scheme: dummy2 } diff --git a/core/modules/file/tests/file_test/src/StreamWrapper/DummyMultipleStreamWrapper.php b/core/modules/file/tests/file_test/src/StreamWrapper/DummyMultipleStreamWrapper.php new file mode 100644 index 0000000000000000000000000000000000000000..76ac49d97a5fe302e82f27eeacd65bf777134e29 --- /dev/null +++ b/core/modules/file/tests/file_test/src/StreamWrapper/DummyMultipleStreamWrapper.php @@ -0,0 +1,10 @@ +<?php + +namespace Drupal\file_test\StreamWrapper; + +/** + * Helper class for testing the stream wrapper registry. + * + * Dummy stream wrapper implementation (dummy1://, dummy2://). + */ +class DummyMultipleStreamWrapper extends DummyStreamWrapper {} diff --git a/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php b/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php index d9b213f45a722c88c9c6757c049b4e334151822a..09718581e4c3614a4cc179ae82d39c213603751c 100644 --- a/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php +++ b/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php @@ -324,6 +324,8 @@ public function testModuleStreamWrappers() { file_exists('dummy://'); $stream_wrappers = \Drupal::service('stream_wrapper_manager')->getWrappers(); $this->assertTrue(isset($stream_wrappers['dummy'])); + $this->assertTrue(isset($stream_wrappers['dummy1'])); + $this->assertTrue(isset($stream_wrappers['dummy2'])); } /**