maba / dependency-injection-extra
1.0.3
2020-02-02 16:34 UTC
Requires
- php: >=7.0
- symfony/dependency-injection: ^2.3|^3.0|^4.0|^5.0
Requires (Dev)
- phpunit/phpunit: ^4.8.36
- satooshi/php-coveralls: ^0.6.1
- sebastian/comparator: ^1.2.4
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
运行测试
composer update
vendor/bin/phpunit