maba/dependency-injection-extra

1.0.3 2020-02-02 16:34 UTC

This package is auto-updated.

Last update: 2024-08-29 04:17:17 UTC


README

已废弃

请使用paysera/lib-dependency-injection,它比这个库提供更多功能。

这是什么?

为更轻松地与Symfony Dependency Injection组件集成而提供的额外功能。

目前仅包含用于注册带标签服务的编译器通过,无需在每种情况下都编写自定义类。

AddTaggedCompilerPass

将带标签服务注册到其他服务。可选地传递标签的属性。

class SomeBundle extends Bundle
{
    public function build(ContainerBuilder $container)
    {
        $container->addCompilerPass(new AddTaggedCompilerPass(
            'some_bundle.registry',
            'my_provider',
            'addProvider',
            array(      // this parameter is optional and defines attributes to pass from tag
                'name',                 // required attribute
                'theme' => 'default',   // optional attribute
            )
        ));
    }
}
class Registry
{
    // first - tagged service. Others (optional) in the order as they come in the attributes array
    public function addProvider(ProviderInterface $provider, $name, $theme)
    {
        $this->providers[$name] = $provider;    // or whatever
    }
}
<service id="awesome_provider" class="Acme/AwesomeProvider">
    <tag name="my_provider" name="awesome"/>
</service>
<service id="nice_provider" class="Acme/NiceProvider">
    <tag name="my_provider" name="nice" theme="not a default one"/>
</service>

AddTaggedIdCompilerPass

相同,但方法的第一参数不是服务本身,而是它的ID。

当有多个带标签服务且不经常使用时,提供了一些懒加载。

尽管如此,你可能还是坚持使用懒服务。

AddTaggedByPriorityCompilerPass

AddTaggedCompilerPass相同,但按priority属性定义的顺序调用方法。

可以使用$compilerPass->setPriorityAttribute('some_other')更改要使用的属性。

优先级越低,调用越早。

如果没有提供优先级,则默认为0

<service id="awesome_provider" class="Acme/AwesomeProvider">
    <tag name="my_provider" name="awesome" priority="9001"/>
</service>
<service id="nice_provider" class="Acme/NiceProvider">
    <tag name="my_provider" name="nice" theme="not a default one" priority="-1"/>
</service>
<service id="another_provider" class="Acme/AnotherProvider">
    <tag name="my_provider" name="another"/>
</service>

解析为

$registry->addProvider($niceProvider, 'nice', 'not a default one'); // priority -1 - smallest
$registry->addProvider($anotherProvider, 'another', 'default');     // priority defaults to 0
$registry->addProvider($awesomeProvider, 'awesome', 'default');     // priority is over 9000

限制

不适用于单个服务上有多个相同标签的情况。示例

<service id="awesome_provider" class="Acme/AwesomeProvider">
    <tag name="my_provider" name="awesome"/>
    <tag name="my_provider" name="this will not be processed"/>
</service>

安装

composer require maba/dependency-injection-extra

运行测试

Travis status Coverage Status

composer update
vendor/bin/phpunit