ojezu / add-call-to-remote-service-bundle
Symfony2 扩展包,允许将一个服务声明中的方法注入到另一个服务中
v1.1.0
2018-03-14 10:37 UTC
Requires
- symfony/dependency-injection: ^3.0 || ^2.7
- symfony/http-kernel: ^3.0 || ^2.7
- symfony/property-access: ^3.0 || ^2.7
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-14 00:12:23 UTC
README
此扩展包允许向容器中添加对其他服务的调用,就像它们在那里声明一样。允许一些解耦——面向对象中最热门的东西。
Symfony 3.4 和 4.0 注意
从 Symfony 3.4 和 4.0 版本开始,依赖注入器能够自己找到所有标记的服务
https://symfony.ac.cn/doc/current/service_container/tags.html#reference-tagged-services
此扩展包仍然有效,在某些情况下可能很有用,例如,当无法覆盖或修改“父”类的声明时。
安装
composer require ojezu/add-call-to-remote-service-bundle
使用
在 app/appKernel.php 中注册此扩展包
class AppKernel extends Kernel { public function registerBundles() { $bundles = array( new OJezu\ConfigurableDiscriminationBundle\AddCallToRemoteServiceBundle(), // app bundles new Acme\TestBundle\ParentBundle(), new Acme\TestBundle\ChildABundle(), new Acme\TestBundle\ChildBBundle(), ); return $bundles; } }
现在,而不是这样做!
services: acme.root_service: class: Acme\Services\RootService calls: - ['registerChildService', ['Foo', '@acme.children.foo']] - ['registerChildService', ['Bar', '@acme.children.bar', {'foo': 'bar'}]] acme.children.foo: class: Acme\Services\Children\FooService acme.children.bar: class: Acme\Services\Children\BarService
你可以这样做!
services: acme.root_service: class: Acme\Services\RootService
services: acme.children.foo: class: Acme\Services\Children\FooService public: false tags: - name: 'ojezu.add_call_to_remote_service' remote_service: '@acme.root_service' method: 'registerChildService' argument.0: 'Foo' argument.1: '@' argument.2.foo: 'bar'
services: acme.children.bar: class: Acme\Services\Children\BarService public: false tags: - name: 'ojezu.add_call_to_remote_service' remote_service: '@acme.root_service' method: 'registerChildService' argument.0: 'Bar' argument.1: '@'
'@'
将分别解析为 acme.children.foo
和 acme.children.bar
!
问题
为什么是 argument.0
、argument.1
、argument.2.foo
而不是数组呢?
Symfony/DependencyInjector 不支持这一点。所有标签属性必须是标量,因为 DependencyInjector 支持并使用的内部 XML 格式。
这会在不需要服务时加载我的服务吗?
不会!此扩展包仅修改容器中服务的定义,不需要(也不会)加载引用的服务。
许可证
MIT