Skip to content
Snippets Groups Projects
Verified Commit 03dbcdc7 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3450516 by kim.pepper: Add support for !service_closure custom tag in YamlFileLoader

(cherry picked from commit 72397df3)
parent 8ed474db
No related branches found
No related tags found
5 merge requests!11958Issue #3490507 by alexpott, smustgrave: Fix bogus mocking in...,!11769Issue #3517987: Add option to contextual filters to encode slashes in query parameter.,!11185Issue #3477324 by andypost, alexpott: Fix usage of str_getcsv() and fgetcsv() for PHP 8.4,!9944Issue #3483353: Consider making the createCopy config action optionally fail...,!8325Update file Sort.php
Pipeline #188991 passed with warnings
Pipeline: drupal

#189003

    ......@@ -9,6 +9,7 @@
    use Drupal\Component\Serialization\Exception\InvalidDataTypeException;
    use Drupal\Core\Serialization\Yaml;
    use Symfony\Component\DependencyInjection\Alias;
    use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
    use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
    use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;
    use Symfony\Component\DependencyInjection\ContainerInterface;
    ......@@ -492,6 +493,11 @@ private function resolveServices(mixed $value): mixed
    return $argument;
    }
    if ($value->getTag() === 'service_closure') {
    return new ServiceClosureArgument($this->resolveServices($argument));
    }
    }
    if (is_array($value)) {
    $value = array_map(array($this, 'resolveServices'), $value);
    ......
    ......@@ -9,7 +9,9 @@
    use Drupal\Core\DependencyInjection\YamlFileLoader;
    use Drupal\Tests\UnitTestCase;
    use org\bovigo\vfs\vfsStream;
    use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
    use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;
    use Symfony\Component\DependencyInjection\Reference;
    /**
    * @coversDefaultClass \Drupal\Core\DependencyInjection\YamlFileLoader
    ......@@ -39,6 +41,9 @@ class: \Drupal\Core\ExampleClass
    example_tagged_iterator:
    class: \Drupal\Core\ExampleClass
    arguments: [!tagged_iterator foo.bar]"
    example_service_closure:
    class: \Drupal\Core\ExampleClass
    arguments: [!service_closure '@example_service_1']"
    YAML;
    vfsStream::setup('drupal', NULL, [
    ......@@ -63,6 +68,13 @@ class: \Drupal\Core\ExampleClass
    $this->assertTrue($builder->has('Drupal\Core\ExampleClass'));
    $this->assertSame('Drupal\Core\ExampleClass', $builder->getDefinition('Drupal\Core\ExampleClass')->getClass());
    $this->assertInstanceOf(TaggedIteratorArgument::class, $builder->getDefinition('example_tagged_iterator')->getArgument(0));
    // Test service closures.
    $service_closure = $builder->getDefinition('example_service_closure')->getArgument(0);
    $this->assertInstanceOf(ServiceClosureArgument::class, $service_closure);
    $ref = $service_closure->getValues()[0];
    $this->assertInstanceOf(Reference::class, $ref);
    $this->assertEquals('example_service_1', $ref);
    }
    /**
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment