作者:林筱杏-HA | 来源:互联网 | 2022-11-27 17:31
我正在将大型应用程序升级到4.2
并且$this->get(".....")
不推荐使用控制器内部,而应该使用AutoWire.
我遇到的问题是我有2个服务,实际上是来自同一个类(只是不同的构造函数args).
services.yml
services:
service.a:
class: Namespace\MyClass
arguments: [ "argument1" ]
service.b:
class: Namespace\MyClass
arguments: [ "argument2" ]
控制器:
public function demoAction() {
$serviceA = $this->get("service.a");
$serviceB = $this->get("service.b");
}
以及有问题的结果:
public function demoAction(MyClass $serviceA, MyClass $serviceB) {
}
我们可以使用别名来服务定义,例如:
MyClass: '@service.a'
但我不能使用虚拟/假类(没有现有的):
MyPseudClass: '@service.b'
你如何在autowire模式下处理这样的案例?
我可以创建"伪"类,从基础扩展,只是为了获得不同的类名,但这感觉很奇怪.
1> 小智..:
从4.2开始,您可以定义命名的自动装配别名.这应该工作:
services:
Namespace\MyClass $serviceA: '@service.a'
Namespace\MyClass $serviceB: '@service.b'
使用Symfony 3.4和4.1,您可以使用绑定 - 但这不是特定的,因为它不考虑类型:
services:
_defaults:
bind:
$serviceA: '@service.a'
$serviceB: '@service.b'