Skip to content
Permalink
Branch: master
Commits on Mar 15, 2019
  1. feature #30348 [DependencyInjection] Add ability to define an index f…

    nicolas-grekas committed Mar 15, 2019
    …or service in an injected service locator argument (XuruDragon, nicolas-grekas)
    
    This PR was merged into the 4.3-dev branch.
    
    Discussion
    ----------
    
    [DependencyInjection] Add ability to define an index for service in an injected service locator argument
    
    | Q             | A
    | ------------- | ---
    | Branch?       | master
    | Bug fix?      | no
    | New feature?  | yes
    | BC breaks?    | no
    | Deprecations? | no
    | Tests pass?   | yes
    | Fixed tickets | n/a
    | License       | MIT
    | Doc PR        | in progress /  symfony/symfony-docs#...
    
    It's more or less the same thing then the PR #30257 but for a service locator argument
    
    Add a simple way to specify an index based on a tag attribute to simplify retrieving a specific service when injecting a service locator as argument into services, but also a way to fallback to a static method on the service class.
    
    Yaml:
    ```yaml
    services:
      foo_service:
        class: Foo
        tags:
          - {name: foo_tag, key: foo_service}
      foo_service_tagged:
        class: Bar
        arguments:
          - !tagged_locator
              tag: 'foo_tag'
              index_by: 'key'
              default_index_method: 'static_method'
    ```
    XML:
    ```xml
    <?xml version="1.0" ?>
    
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/services
        http://symfony.com/schema/dic/services/services-1.0.xsd">
      <services>
        <service id="foo" class="Foo">
            <tag name="foo_tag" key="foo_service" />
        </service>
        <service id="foo_tagged_iterator" class="Bar" public="true">
          <argument type="tagged_locator" tag="foo_tag" index-by="key" default-index-method="static_method" />
        </service>
      </services>
    </container>
    ```
    PHP:
    ```php
    // config/services.php
    use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;
    use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
    
    $container->register(Foo::class)
            ->addTag('foo_tag', ['key' => 'foo_service']);
    
    $container->register(App\Handler\HandlerCollection::class)
             // inject all services tagged with app.handler as first argument
             ->addArgument(new ServiceLocatorArgument(new TaggedIteratorArgument('app.handler', 'key')));
    ```
    
    Usage:
    ```php
    // src/Handler/HandlerCollection.php
    namespace App\Handler;
    
    use Symfony\Component\DependencyInjection\ServiceLocator;
    
    class HandlerCollection
    {
         public function __construct(ServiceLocator $serviceLocator)
         {
               $foo = $serviceLocator->get('foo_service'):
         }
    }
    ```
    
    Tasks
    
    * [x]  Support PHP loader/dumper
    * [x]  Support YAML loader/dumper
    * [x]  Support XML loader/dumper (and update XSD too)
    * [x]  Add tests
    * [x]  Documentation
    
    Commits
    -------
    
    cb3c56bc0c Support indexing tagged locators by FQCN as fallback
    250a2c8332 [DI] Allow tagged_locator tag to be used as an argument
Commits on Mar 14, 2019
Commits on Mar 11, 2019
Commits on Mar 10, 2019
  1. Merge branch '4.2'

    nicolas-grekas committed Mar 10, 2019
    * 4.2: (27 commits)
      cs fix
      cs fix
      [PHPUnit-Bridge] override some environment variables
      [TwigBridge] Remove use spaceless tag
      Upgrade zookeeper ext
      [translation] Update defaut format from yml to yaml
      Change default log level for output streams
      update docblock to match the actual behavior
      Don't resolve the Deprecation error handler mode until a deprecation is triggered
      compatibility with phpunit8
      Make 'headers' key optional for encoded messages
      [Debug][DebugClassLoader] Detect annotations before blank docblock lines on final and internal methods
      Fix undefined variable fromConstructor when passing context to getTypes
      Added translations for chineese language.
      Allow 3rd argument to be null
      Remove whitespace (tab on blank line)
      [Monolog] Really reset logger when calling logger::reset()
      [Form] Fixes debug:form appears many times as type extensions configured with new getExtendedTypes method
      Update src/Symfony/Component/PropertyInfo/Tests/Extractor/ReflectionExtractorTest.php
      Update src/Symfony/Component/PropertyInfo/Tests/Extractor/ReflectionExtractorTest.php
      ...
  2. Merge branch '3.4' into 4.2

    nicolas-grekas committed Mar 10, 2019
    * 3.4:
      cs fix
      cs fix
      [PHPUnit-Bridge] override some environment variables
      [TwigBridge] Remove use spaceless tag
      [translation] Update defaut format from yml to yaml
      Change default log level for output streams
      update docblock to match the actual behavior
      compatibility with phpunit8
      [Debug][DebugClassLoader] Detect annotations before blank docblock lines on final and internal methods
      Added translations for chineese language.
You can’t perform that action at this time.